
线段树
文章平均质量分 53
ijbuhv
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu 4288 Coder 线段树
//先将所有的操作离线,将读入的所有数按照从小到大排列,去除重复的点//用线段树维护这个区间内的数读入的数目,用一个数组存入在这个区间内//对5取余数分别为0,1,2,3,4的所有数之和//更新的时候tree[v].sum[i] = tree[v#include#include#include#includeusing namespace std ;const原创 2015-04-01 22:01:49 · 595 阅读 · 0 评论 -
hdu2795Billboard 线段树
//给一个h*w的广告板//在上面贴广告,每个广告的宽度为1,长度为wi//广告要求尽可能高,在高的前提下往左放//给n个广告的长度,问其高度位置//用线段树存入区间的最大的剩余区间//每次查询大于该广告的长度的最左值#include#include#includeusing namespace std ;const int maxn = 200010 ;原创 2015-07-23 19:25:36 · 612 阅读 · 0 评论 -
poj3468A Simple Problem with Integers 线段树
//两个操作,第一个区间[a , b]内的所有数加c//第二个询问区间[a , b]的值//很标准的线段数#include#include#includeusing namespace std ;const int maxn = 1e5+10 ;#define left v#define right vtypedef __int64 ll ;ll h[m原创 2015-07-24 18:03:23 · 576 阅读 · 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 · 617 阅读 · 0 评论 -
hdu5029Relief grain 线段树
//墙有[1 , n]段//刚开始是所有段都是涂颜色2//p a b c//将 [a,b]区间都涂为颜色c//q a b//问[a,b]区间有多少种颜色//由于颜色只有30种颜色//用二进制表示颜色 //然后就是简单的线段树#include#include#includeusing namespace std ;const int maxn = 1e6+10 ;#def原创 2015-09-11 21:38:17 · 490 阅读 · 0 评论 -
hdu4902Nice boat 线段树
//线段树//对于覆盖操作 ,push_down时可以直接覆盖前面的操作//对于gcd操作 , push_down需要向下走到覆盖操作#include#include#includeusing namespace std ;const int maxn = 1e5+10 ;#define left v<<1#define right v<<1|1int h[maxn];str原创 2015-09-06 13:42:01 · 425 阅读 · 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 · 278 阅读 · 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 · 514 阅读 · 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 · 345 阅读 · 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 · 487 阅读 · 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 · 718 阅读 · 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 · 898 阅读 · 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 · 715 阅读 · 0 评论 -
hdu1698Just a Hook 线段树 成段更新水题
//简单的线段树,注意成段更新,以免超时#include#include#includeusing namespace std ;const int maxn = 100010 ;struct node{ int value ; int r , l; int flag ;//记录到当前区间的状态}tree[maxnvoid buil原创 2015-04-07 19:05:25 · 464 阅读 · 0 评论 -
pojHotel 线段树
//空间分配//1 x 找连续的长度为x的空间//2 x d [x,x+d-1]空间的占用清除//维护ma_l , ma_r , ma分别为左边的空闲空间,右边的空闲空间和最大的空闲空间#include#include#includeusing namespace std ;const int maxn = 50010 ;#define left v#de原创 2015-07-25 16:53:39 · 648 阅读 · 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 · 1129 阅读 · 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 · 1266 阅读 · 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 · 664 阅读 · 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 · 915 阅读 · 0 评论 -
hdu4614Vases and Flowers 线段树
//给一个数组,两个操作//1 A F 以A为起点的F个空闲空间插花,输出起点和终点//2 L R 将[L , R]的所有的有花的花拔除,问清除了几朵花//用线段树维护剩余空间的个数//然后再在查询时找出空间#include#include#includeusing namespace std ;const int maxn = 50010 ;#define原创 2015-07-25 16:03:27 · 662 阅读 · 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 · 623 阅读 · 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 · 789 阅读 · 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#includeusing namespace std ;const原创 2015-11-14 15:03:04 · 429 阅读 · 0 评论