树状数组
No__stop
这个作者很懒,什么都没留下…
展开
-
hdu4605 Magic Ball Game
#include#include#include#includeusing namespace std ;const int maxn = 111111 * 2 ;struct Ans{ int x , y ;} ans[maxn] ;struct Point{ int x , v ;} p[maxn] ;struct Node{ int id , x ;原创 2013-07-24 16:31:51 · 965 阅读 · 0 评论 -
hdu 4638 Group
hdu 4638 Group题目大意:题面意思不解释了,转换成数学模型,就是问一段区间[l,r]有几段连续的数,比如[2,3,1,4,6,7]那么这段区间内有两段,分别是1,2,3,4和6,7。解题思路:由于询问次数有100000次,所以我们直接处理[l,r]显然不行。线段树在线似乎也是做不了的。可以想到的是,如果我们从左到右一个个加进来,那么对于加进来的第i个数num[i],那么它就能增原创 2013-08-02 14:32:47 · 1443 阅读 · 0 评论 -
DLUT1201: 区间游戏
DLUT1201: 区间游戏挺有趣的一道题。。中文题就不写题意了。乍一看像是个博弈,但是仔细分析下,可以发现,其实当先手的那个人选了某一条线段后,答案A-B-B是确定的。为什么呢?因为他们都会尽可能多的去把线段扩进去嘛。所以就是怎么求一个线段最多能扩进多少子线段了。这样的话,问题就比较简单了。先给所有的线段离散化,然后按右端点排序,这里要注意的是,在右端点相同的情况下,要把左端点小的放前面原创 2013-12-20 13:33:39 · 1222 阅读 · 0 评论 -
hdu 4630 No Pain No Game
hdu 4630 No Pain No Game题意:给出一个n和1到n的某个排列,询问q次,每次询问[l,r]区间内任意挑两个数,最大公约数的最大值是多少。解题思路:记录一个pre数组,pre[i]表示对于某个数i,已经出现过的它的倍数最近是在那个位置。将询问按右端点排序。用树状数组维护从某一位置到maxn的最佳答案。从1到n开始扫描num[i],sqrt(num[i])的复杂度去枚举它原创 2013-07-31 13:57:48 · 1409 阅读 · 0 评论 -
hdu4456 Crowd(二维树状数组)
题意:给出一个n*n的矩阵,然后m个operation,1表示坐标(x,y)的值加z,2表示与坐标(x,y)的曼哈顿距离不超过z的点的权值和。解题思路:将矩阵侧过来45度,发现询问的时候,有效的点构成的其实是一个矩阵。然后就变成了单点修改,求矩阵和的问题。我们考虑裸二维树状数组的做法,会发现矩阵太大,但是注意到,初始的时候,矩阵里面所有的值都为0,那么这个二维树状数组中,有效的点就是修改的那些原创 2014-11-08 19:23:54 · 1280 阅读 · 0 评论