题目大意:有一颗长满苹果的苹果树,有两个操作。
1.询问以一个点为根的子树中有多少个苹果。
2.看看一个点有没有苹果,如果没有苹果,那么那里就马上长出一个苹果(= =!);否则就把那个苹果摘下来。
思路:进行一次深搜,将每个节点最开始出现的时间和最后出现的时间记在一个数组里,那么这两点之间的点就是它以及它的子树的二倍,然后就用树状数组来维护区间和就行了。
CODE:
...
分类:
移动开发 时间:
2014-10-16 12:08:52
阅读次数:
200
题目大意:给出一个序列,单点修改,询问区间第k大。
思路:如果不带修改,那么划分树就可以解决,但是划分树是静态的树,不支持修改。带修改的主席舒其实就是外层fenwick套内层权值线段树,但是权值线段树必须动态开节点。然后修改的时候就像树状数组修改那样,每次修改logn个权值线段树。查询的时候也一样,返回logn个权值线段树统计的和。
最后为了求区间第k大,还需要二分答案。
C...
分类:
其他好文 时间:
2014-10-15 18:11:31
阅读次数:
271
题目大意:给出y值升序的一些点,定义一个点的level值为它左下方的点的数量,求每一个level有多少个点。
思路:由于y值是升序的,那么后面的点只要判断是否x值比前面的大就行了。那么就用树状数组维护。
CODE:
#include
#include
#include
#include
#define MAX 50000
using namespace std;
...
分类:
编程语言 时间:
2014-10-15 18:09:01
阅读次数:
136
题目大意:一个序列,有两种操作,1.将一段数中的每一个数开根号。2.查询一段数的和。
思路:和3211是一个题,有兴趣的可以看看我的那篇博客。
CODE:
#include
#include
#include
#include
#include
#define MAX 100010
using namespace std;
int cnt,asks;
long...
分类:
编程语言 时间:
2014-10-15 12:16:20
阅读次数:
189
题目大意:花神对每一个国家有一个喜爱程度,有的时候他会对连续的一段国家进行访问,求他的喜爱程度的和;有的时候他会对连续的一段国家产生厌恶,喜爱程度变成sqrt(x)下取整。
思路:乍一看好像是RMQ问题,用线段树就可以水过,但是开根号的标记怎么下传?这是一个严重的问题,所以我们要换一个思路。
注意到开根号有一个有趣的性质:sqrt(1) = 1,sqrt(0) = 0,而且所有的数字经过有...
分类:
编程语言 时间:
2014-10-15 11:44:08
阅读次数:
216
树状数组树状数组(Binary Indexed Tree(BIT), Fenwick Tree)是一个查询和改动复杂度都为log(n)的数据结构。主要用于查询随意两位之间的全部元素之和,可是每次仅仅能改动一个元素的值;经过简单改动能够在log(n)的复杂度下进行范围改动,可是这时仅仅能查询当中一个元...
分类:
其他好文 时间:
2014-07-07 13:13:05
阅读次数:
166