线段树
文章平均质量分 53
Jiahe Xu
为何要去攀登珠穆朗玛峰,因为她就在那里啊.
展开
-
wikioi1082 线段树和lazy思想
最原始的lazy思想,注意在update的原创 2014-05-26 22:54:31 · 623 阅读 · 0 评论 -
hdu4578 Transformation
转自 http://blog.csdn.net/ophunter_lcm/article/details/9878105 成名哥果然牛逼,这种题分类为转载 2014-10-05 16:36:06 · 579 阅读 · 0 评论 -
codevs1282 约瑟夫问题 线段树
直接用线段树维护区间和。last记录还剩多少人。st记录原创 2014-11-06 11:14:50 · 621 阅读 · 0 评论 -
hdu1540 poj2892 Tunnel Warfare 线段树端点更新 SBT
题目大意,给n个点表示n个村庄,一开始都是相连的,现在有3种操作:Q x,查询第与第x个村庄相连的村庄个数;D x,摧毁掉第x个村庄;R 恢复刚摧毁的村庄。题目分析:每个点用2个状态表示,0表示被摧毁,1表示存在,因为有恢复操作,并且每次恢复上一个被摧毁的村庄,所以用一个栈存储所有被摧毁的村庄,每次R操作恢复栈顶村庄。这题关键是查询操作,如果查询的村庄x不存在,则没有村庄与之相连通,如果原创 2014-08-13 19:14:02 · 662 阅读 · 0 评论 -
hdu3397 Sequence operation 线段树区间更新&&bzoj1858: [Scoi2010]序列操作
题目大意:给一个01串,给3种操作,分别是将一个区间置0,置1和取反。给2种查询,分别是查询某个区间1的个数和查询某个区间最长连续1的个数。题目分析:线段树好题。对区间的3种操作中,置0和置1操作很简单,直接将区间lazy标记,强制覆盖。如果是对区间取反的话,就要考虑区间原来的状态了。如果原来该区间已经取反了,再取反相当于还原,如果该区间没有标记,标记上取反直接返回,如果有标记,则原创 2014-08-14 19:34:45 · 672 阅读 · 0 评论 -
spoj GSS4 - Can you answer these queries IV 线段树
字符串hash好题,当长度大于m*l时要把一开始多出来的部分原创 2014-11-01 14:44:45 · 624 阅读 · 0 评论 -
CF703D. Mishka and Interesting sum
题目大意:给一个长度为n的序列,m次询问,询问为区间中所有出现了偶数次的数的异或和。题解:由于区间的异或和剩下的是出现奇数次的数,每次询问的答案即为 x^y x=区间内所有出现了的数的异或和 y=区间内出现了奇数次的数的异或和.如果在线询问的话x不好维护。所以离线处理,如果这个数出现过就抹去之前出现的点,保证每个数只出现一次。#include #include #include #原创 2016-08-17 15:50:31 · 457 阅读 · 0 评论 -
hdu5862Counting Intersections 扫描线+线段树
题目大意:给你n个平行于坐标轴的线段,求其交点数,n题解:首先将线段离散化。 然后将所有线段按照横坐标的顺序,按照先插入再查找再删除的顺序进行操作。对于横线 如果是左端点,则将其纵坐标加1,右端点则减1,对于竖线直接求和就行了。(线段树点要开多#include #include #include #include #include using namespace std;#原创 2016-08-19 15:17:24 · 433 阅读 · 0 评论 -
Codeforces311D. Interval Cubing 神线段树
先离散,然后直接用SBT乱搞。#include #include #include #include #include using namespace std;#define maxm 51000#define maxn 210000int getint(){ char c; int res; while(c=getchar(),c'9'); re原创 2014-12-15 21:57:56 · 984 阅读 · 0 评论 -
hdu1542 扫描线+线段树
给n个矩形(边平行于坐标轴) 求围起来的面积 裸的扫描线+线段树#include #include #include #include #include #include using namespace std;#define ss printf("orz\n");#define maxn 2000#define lson l,mid,rt<<1#define rson mid原创 2016-11-05 15:15:26 · 559 阅读 · 0 评论 -
hdu5826Rikka with Sequence 线段树
题意:三种操作,一种是区间增加,一种是区间开方,一种是区间求和。1 很快能想到,如果一个100000的数字,最多开方个四五次以后,就变成1了,而且sqrt(1)=1,那么我们就可以在更新的时候想到一个很方便的剪枝,就是,如果这个区间的最大值是1,也就是这个区间全部是1的时候,就可以不继续递归下去了但是还有一个思路可以剪枝。就是一段区间如果全部开根号到1以后,那么如果这段区间再增加值,整原创 2017-02-10 22:07:18 · 396 阅读 · 0 评论 -
hdu5930 GCD线段树
题目大意:给一个序列,每次换一个位置的值,求每次更新后任意连续的序列的gcd,有几个不同的。序列长度和数字大小题解:一开始求出整个每个不同gcd的值可以出现多少次,更新的话对左端所有相同gcd的段求出来,和右端的的段直接暴力更新,由于两端都最多只有logn段,所以复杂度是可以承受的。#include using namespace std ;#define maxn 51000#de原创 2017-01-26 22:03:52 · 1139 阅读 · 0 评论 -
hdu5869 Different GCD Subarray Query 线段树
题意:长度n的序列, m个询问区间[L, R], 问区间内的所有子段的不同GCD值有多少种.题解:考虑固定左端点的不同GCD值,只有不超过logA种, 所以事件点只有nlogA个. 那么离线处理, 按照区间右端点排序从小到大处理询问,用一个树状数组维护每个GCD值的最大左端点位置即可. 复杂度是O(nlogAlogn).#includeusing namespace std;#原创 2017-03-14 10:44:38 · 483 阅读 · 0 评论 -
校赛H题 tree 树链剖分维护区间平方的和
题意:20w个节点的树,有边权。一个操作:把某个点的子树的边权都加一个给定的值。一个询问,问树上两点间边权的平方和。题解:裸的树链剖分,很久没有先线段树了,lazy标记已经忘得差不多了,回忆一下,lazy记录的是当前区间未向子区间传递的信息,本区间的信息和本区间的lazy一点关系都没有。对于树边,我们把值赋到深度更大的那个点上,最后讨论一下边界就好了本题要维护三个数组,区间平方和,区间所有原创 2017-05-27 20:29:33 · 479 阅读 · 0 评论 -
线段树总结(二) 进阶篇
看了总结(一) (假装你看了),那么对于线段树的基本操作就有个了解了,进阶篇一般是源自网络赛,多校里面难度适中,时间上应尽量控制在1个半小时内弄完。一:优化类问题。线段树很多时候都是在推dp方程或者公式的时候发现有个以前所有状态取最大或最小,如果直接递推一遍就是O(N)的复杂度,而线段树在操作上可以把一遍操作降到logn。http://blog.csdn.net/ied98/article原创 2017-07-01 07:48:38 · 1491 阅读 · 0 评论 -
线段树总结(三) 终极篇
本文的题。。。说实话博主第一次看得时候都不知道是线段树。。。。而且代码调起来很刺激。。。。建议看一看知道有这么个东西。。。。http://blog.csdn.net/ied98/article/details/43823073 维护区间置换http://blog.csdn.net/eod_realize/article/details/39239361 很多题目找不到了,以后博原创 2017-07-01 07:54:24 · 419 阅读 · 0 评论 -
spoj-QTREE3 LCT
题目大意:一棵树分为黑点和白点,可以改变一个点的颜色,问从1到v的路径上第一个黑点是哪个点LCT做法:把黑点col记作1,sum[x]记录x点子树右多少个黑点,我们可以用LCT把1到x路径上所有的点组成一个splay,然后在splay上找关键字最小的点就可以了,不难发现这个题就算找路径上第k个点也是很容易实现的。#include using namespace std;#define ma原创 2017-07-08 10:08:46 · 436 阅读 · 0 评论 -
hdu4893 Wow! Such Sequence! 线段数
由于斐波拉契数增长很快第88个就爆原创 2014-10-28 18:07:20 · 439 阅读 · 0 评论 -
bzoj3553: [Shoi2014]三叉神经树 树链剖分
此题的完成,代表近期的树链剖分就告一段落,全力进入联赛复习。原创 2014-09-13 00:20:23 · 1383 阅读 · 0 评论 -
poj3667 线段树区间合并
第一次写区间合并,自己改了很久,又对着标程改了很久,反正就是很久很久。。。。。原创 2014-07-16 22:37:43 · 501 阅读 · 0 评论 -
hdu3874 Necklace 线段树端点更新
题目大意:给n个数,求任意区间不相同数字之和。题目分析:n个数是给定的,不会变了,区间也是给定的。由于要求任意区间不重复数字之和,那就和这道super mario非常类似了,我们可以离线处理所有询问。由于要求不重复数字之和,我们把询问区间按右断点排序,这样从左往右扫描数列,如果以前没有出现的数字,直接插入,如果出现了,将这个数字上次出现的位置删去,在当前位置重新插入这个数。如果扫描的位置大原创 2014-08-13 16:54:34 · 691 阅读 · 0 评论 -
poj3468 A Simple Problem with Integers 线段树区间更新
#include #include #include #include #include #include using namespace std;#define maxn 110000#define ll long long#define lson rt<<1,l,m#define rson rt<<1|1,m+1,rll tree[maxn<<2],add[maxn<<2原创 2014-08-13 14:47:34 · 431 阅读 · 0 评论 -
poj2777 线段树+位运算
#include #include #include #include #include using namespace std;#define maxn 210000int vis[maxn<<2],tree[maxn<<2];void pushup(int rt){ tree[rt]=(tree[rt<<1] | tree[rt<<1|1]);}void push原创 2014-08-12 18:53:00 · 496 阅读 · 0 评论 -
hdu4417 Super Mario 线段树端点更新
先按枪的高低进行排序,再对询问的高度值进行排序。原创 2014-08-13 16:05:39 · 536 阅读 · 0 评论 -
hdu 1698 Just a Hook 线段树成段更新
裸的成段更新。。。#include #include #include #include #include using namespace std;#define maxn 110000#define lson rt<<1,l,m#define rson rt<<1|1,m+1,rint tree[maxn<<2],lazy[maxn<<2];void pushup(int r原创 2014-08-13 21:46:04 · 538 阅读 · 0 评论 -
poj1436 Horizontally Visible Segments 线段树成段更新
#include #include #include #include #include #include using namespace std;#define maxn 8100#define lson rt<<1,l,m#define rson rt<<1|1,m+1,rint tree[maxn<<3];vectormark[maxn];int lab[maxn<<原创 2014-08-14 15:24:01 · 531 阅读 · 0 评论 -
hdu1556 线段树 区间修改
#include #include #include #include #include using namespace std;#define maxn 1100000#define lson rt<<1,l,m#define rson rt<<1|1,m+1,rint tree[maxn<<2];void pushdown(int rt){ if(tree[rt]原创 2014-08-13 22:37:43 · 652 阅读 · 0 评论 -
poj2828 Buy Tickets 线段树端点更新
逆序插入,这样就能把第i个位置上的人确定下来了。原创 2014-07-15 19:28:35 · 554 阅读 · 0 评论 -
hdu1754 线段树端点更新
简单端点更新#include #include #include #include #include using namespace std;#define maxn 210000#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int n,q;int tree[maxn<<2];void pushup(int rt){原创 2014-07-15 18:35:35 · 541 阅读 · 0 评论 -
bzoj1036 codevs2460: [ZJOI2008]树的统计 树链剖分
简单树链抛分,竟然总是dfs写错。。。。。不能忍。#include #include #include #include #include #include using namespace std;#define maxn 60000#define ll long long#define lson rt<<1,l,m#define rson rt<<1|1,m+1,r#def原创 2014-09-10 17:28:37 · 604 阅读 · 0 评论 -
1012: [JSOI2008]最大数maxnumber 线段树区间统计
本题用线段树即可AC主要是建树的时候有点难想,因为每次元素都放在最后所以原创 2014-06-10 16:29:35 · 551 阅读 · 0 评论 -
hdu1698 线段树区间更新
简单区间更新,col为lazy标记#include #include #include #include #include using namespace std;#define maxn 111111#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int sum[maxn<<2];int col[maxn<<2];int原创 2014-07-15 22:24:41 · 519 阅读 · 0 评论 -
hdu2795 Billboard 线段树区间更新
简单区间统计#include #include #include #include using namespace std;#define maxn 210000#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int tree[maxn<<2];int h,w,n;void pushup(int rt){ tree[原创 2014-07-15 19:01:16 · 458 阅读 · 0 评论 -
bzoj2243: [SDOI2011]染色 树链剖分
熟练度很重要,一次AC~~~。/************************************************************** Problem: 2243 User: xujiahe Language: C++ Result: Accepted Time:6748 ms Memory:20908 kb*********原创 2014-09-11 16:44:15 · 677 阅读 · 0 评论 -
poj2528Mayor's posters 离散化+线段树区间更新
线段树和离散化。1e7原创 2014-07-07 15:45:47 · 629 阅读 · 0 评论 -
bzoj1018: [SHOI2008]堵塞的交通traffic 线段树区间合并
线段树经典题目。判断点的连通性原创 2014-07-05 22:07:31 · 706 阅读 · 0 评论 -
2017吉林省赛 C题 线段树
题意:10w的RGB序列,每次把区间设为一个字母 或者把序列中的R换成B G换成R B变成G 一种询问 问区间中 每个字母各多少个。简单的线段树区间打标记,要注意操作间的影响。#include using namespace std;#define maxn 410000#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#defin原创 2017-09-24 20:04:31 · 684 阅读 · 0 评论