线段树
文章平均质量分 53
ijbuhv
这个作者很懒,什么都没留下…
展开
-
hdu 4288 Coder 线段树
//先将所有的操作离线,将读入的所有数按照从小到大排列,去除重复的点 //用线段树维护这个区间内的数读入的数目,用一个数组存入在这个区间内 //对5取余数分别为0,1,2,3,4的所有数之和 //更新的时候tree[v].sum[i] = tree[v #include #include #include #include using namespace std ; const原创 2015-04-01 22:01:49 · 563 阅读 · 0 评论 -
hdu2795Billboard 线段树
//给一个h*w的广告板 //在上面贴广告,每个广告的宽度为1,长度为wi //广告要求尽可能高,在高的前提下往左放 //给n个广告的长度,问其高度位置 //用线段树存入区间的最大的剩余区间 //每次查询大于该广告的长度的最左值 #include #include #include using namespace std ; const int maxn = 200010 ;原创 2015-07-23 19:25:36 · 562 阅读 · 0 评论 -
poj3468A Simple Problem with Integers 线段树
//两个操作,第一个区间[a , b]内的所有数加c //第二个询问区间[a , b]的值 //很标准的线段数 #include #include #include using namespace std ; const int maxn = 1e5+10 ; #define left v #define right v typedef __int64 ll ; ll h[m原创 2015-07-24 18:03:23 · 547 阅读 · 0 评论 -
hdu5475An easy problem 线段树
//两个操作 //初始数值是x = 1 //1 y 将 x = x*y%m //2 n x = (x*a[n])%m a[n]为第n个数 //每次输出对应的x //先离线,然后用线段树每个数作用的区间都乘以该数 #include<cstdio> #include<cstring> #include<iostream> using namespace std ; const int maxn =原创 2015-09-26 18:24:38 · 540 阅读 · 0 评论 -
hdu5029Relief grain 线段树
//墙有[1 , n]段 //刚开始是所有段都是涂颜色2 //p a b c //将 [a,b]区间都涂为颜色c //q a b //问[a,b]区间有多少种颜色 //由于颜色只有30种颜色 //用二进制表示颜色 //然后就是简单的线段树 #include #include #include using namespace std ; const int maxn = 1e6+10 ; #def原创 2015-09-11 21:38:17 · 451 阅读 · 0 评论 -
hdu4902Nice boat 线段树
//线段树 //对于覆盖操作 ,push_down时可以直接覆盖前面的操作 //对于gcd操作 , push_down需要向下走到覆盖操作 #include #include #include using namespace std ; const int maxn = 1e5+10 ; #define left v<<1 #define right v<<1|1 int h[maxn]; str原创 2015-09-06 13:42:01 · 399 阅读 · 0 评论 -
文章标题
//给出长度为n的序列,s(i,j)表示 //在[i,j]区间内的数少了的最小非负数 //先考虑起点为s[1,i]的区间,发现是一个递增 //然后对于删了第一个数,那么从s[2,i]第一个大于第一个数开始到下一个 //值为a[1]的区间的所有数都为a[1] //然后就是重复删除数字 //对于区间的更新可以用线段树做 #include<cstdio> #include<cstring> #includ原创 2015-09-30 22:23:53 · 243 阅读 · 0 评论 -
hdu5381The sum of gcd 线段树+set
//f(l,r)=∑(i=l~r)∑j=(i~r)gcd(ai,ai+1....aj) //可以知道每添加一个新的数i,添加了i个区间 //而确定了右端点的所有数最多有log(a[i])个 //因为从右往前走,每次最少除2 //所以可以先将其离线 //然后从前到后加入ai用set存入以i为最后一个区间的所有区间 //中所有不同的gcd,每个gcd的个数 //然后用线段树进行成段的更新 #inclu原创 2015-11-03 22:05:50 · 483 阅读 · 0 评论 -
hdu4267A Simple Problem with Integers 线段树
// 1 a b k c 在区间[a,b]内满足条件 (i - a) % k == 0的位置加c //2 a 位置a的数 //由于k<=10,所以可以开55棵线段树,存下相隔几个数取一个树,且这棵树的起点 #include<cstdio> #include<cstring> #include<iostream> using namespace std ; const int maxn = 5e4+原创 2015-10-07 18:17:25 · 311 阅读 · 0 评论 -
hdu5239Doom 线段树+找规律
//给出n个数据 , 对于每次[l,r] //操作,s加上[l,r]区间的所有数 //之和,并且将[l,r]区间的所有数 //都平方 //输出s%9223372034707292160 //打表可以发现对于每个数在做一定操作 //后其值一定不变 //所以只需要维护一个标记就行 #include<cstdio> #include<cstring> #include<iostream> using n原创 2015-09-23 19:53:53 · 458 阅读 · 0 评论 -
hdu5316Magician 线段树
//1 a b 将a位置的数改为b //0 a b 输出[a,b] 区间内的 maximum sum of beautiful subsequence //A beautiful subsequence is a subsequence that all the adjacent pairs //of elves in the sequence have a different parity of原创 2015-08-02 14:39:26 · 674 阅读 · 0 评论 -
hdu5289Assignment
//给一串序列,找出的区间[l,r]使得在这个区间内的任意两个数的差小于k //对于第i个数,设一i为右边间得到其左边界的最小值为last[i] //那么对于以i+1为右边界的区间,其左边界的最小值一定在[last[i],i+1]之间 //用线段树存入区间的最大和最小值 //那么就可以用线段树找出在区间[last[i],i+1]之间与a[i+1]的差值大于等于k且最大的位置 //即为以i原创 2015-07-21 21:47:23 · 833 阅读 · 0 评论 -
hdu4737A Bit Fun 线段树
//给一串序列,问有多少对[i,j]使得 //[i,j]区间的所有数的或的值小于m //可以知道'或'操作的加(a|b)>=max(a,b) //可以枚举区间的右边r,找左边第一个不满足的位置 //然后在它们中间的r为由边界的区间都没满足 //对于找第一个不满足的位置,可以用线段树做, #include<cstdio> #include<cstring> #include<iostream> usi原创 2015-07-27 21:48:56 · 682 阅读 · 0 评论 -
hdu1698Just a Hook 线段树 成段更新水题
//简单的线段树,注意成段更新,以免超时 #include #include #include using namespace std ; const int maxn = 100010 ; struct node { int value ; int r , l; int flag ;//记录到当前区间的状态 }tree[maxn void buil原创 2015-04-07 19:05:25 · 434 阅读 · 0 评论 -
pojHotel 线段树
//空间分配 //1 x 找连续的长度为x的空间 //2 x d [x,x+d-1]空间的占用清除 //维护ma_l , ma_r , ma分别为左边的空闲空间,右边的空闲空间和最大的空闲空间 #include #include #include using namespace std ; const int maxn = 50010 ; #define left v #de原创 2015-07-25 16:53:39 · 612 阅读 · 0 评论 -
hdu4578Transformation 线段树
//长度为n的数组 四个操作 //1 x y c [x,y]区间的数都加c //2 x y c [x, y] 区间的数都乘以c //3 x y c [x ,y] 区间的数都变为c //4 x y p [x ,y] 求区间的数的p次方的和 //用线段树维护里面的值都相等的区间 ,那么这个区间的所需答案为(r-l+1)*(tree[v].eq)^q //对于懒惰操作 mul , eq ,原创 2015-07-25 11:10:25 · 1100 阅读 · 0 评论 -
hdu4553约会安排 线段树
//DS QT 找一段最靠前的长度为QT的空间 //NS QT 找一段最靠前的长度为QT的空间,如果没找到可以将DS占据的空间当做空闲空间,找一段最靠前的空间 //STUDY!! L R 清空L ,R的空间 //用两个线段树,一个处理DS的情况,一个处理NS的情况 //线段树维护,ma_l , ma_r , ma 区间[l,r]的左边的空闲区间,右边的以及最大的空闲区间 #incl原创 2015-07-25 11:58:50 · 1242 阅读 · 0 评论 -
Sequence operation
//0 a b 将[a,b]区间的所有数变为0 //1 a b 将[a,b]区间的所有数都变为1 //2 a b 将[a,b]区间的所有数0变1,1变0 //3 a b 问[a,b]区间的1的个数 //4 a b 问[a,b]区间最长的连续1的子段长度 //维护ma_l[2] , ma_r[2] , ma[2] ,sum[2]分别为区间左边,右边,最大的连续1和0,,区间1和0的个数 //lazy原创 2015-07-26 13:25:45 · 619 阅读 · 0 评论 -
hdu1540Tunnel Warfare 线段树
//Q pos 问包含pos的连续区间的长度 //D pos 删除pos位置的元素 //R 恢复上一个被删除的元素 //用栈维护被删除的元素位置 //用线段树维护左边连续区间,右边连续区间的长度 #include<cstdio> #include<cstring> #include<iostream> #include<vector> using namespace std ; const int原创 2015-07-26 17:19:27 · 882 阅读 · 0 评论 -
hdu4614Vases and Flowers 线段树
//给一个数组,两个操作 //1 A F 以A为起点的F个空闲空间插花,输出起点和终点 //2 L R 将[L , R]的所有的有花的花拔除,问清除了几朵花 //用线段树维护剩余空间的个数 //然后再在查询时找出空间 #include #include #include using namespace std ; const int maxn = 50010 ; #define原创 2015-07-25 16:03:27 · 619 阅读 · 0 评论 -
hdu3308LCIS 线段树
//U A B 将第A位置的元素改为B //Q A B询问[A , B]区间的最长的递增序列 //维护ma_l , ma , ma_r 左边最长,区间最长,右边最长 #include<cstdio> #include<cstring> #include<iostream> using namespace std ; const int maxn = 1e5 + 10 ; #define left v原创 2015-07-26 19:22:43 · 584 阅读 · 0 评论 -
hdu2464 A Pair of Graphs 线段树
//给两个顶点数相同的图 //I_A , I_B, D_A , D_B ;分别为增加A图,B图的一个边,删除A图,B图的一个边的cost //问最少需要花费多少使得两幅图同构 //由于n很小,可以暴力枚举A的每一个点对应B图的点对应关系,然后就是对应边如果一幅图有 //另一幅图没有,就选删除有的或增加没有的小的cost #include<cstdio> #include<cstring> #incl原创 2015-07-26 16:41:21 · 738 阅读 · 0 评论 -
hdu4973A simple simulation problem. 线段树
//n(n<=5e4+10)个格子,每个格子的初始值为1 //m(m<=5e4+10)个询问 //D l r 将区间l,r的所有点翻倍 //D l r 问区间l,r中格子中最多的数 //线段树维护三个值,ss(区间的所有值之和),ma(区间中的最大值) //mm(区间需要乘2的多少次方) #include #include #include using namespace std ; const原创 2015-11-14 15:03:04 · 401 阅读 · 0 评论