
线段树
Lifel
dcoi 蒟蒻一枚 欢迎交流~~~qq:1627767186
展开
-
Splay基本操作和线段树(指针版)
splay线段树splay#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<queue>#include<vector>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(i原创 2017-08-07 20:17:35 · 696 阅读 · 0 评论 -
hdu 1542 扫描线+线段树
题目大意:求矩形面积的并 思路:按y轴排序,然后将x投影到线段树上做一个线段覆盖问题即可 注意:为了避免重复,线段坐标右端点是开区间,更新时需要加上1#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b原创 2017-08-27 16:10:57 · 365 阅读 · 0 评论 -
bzoj3531[Sdoi2014]旅行(树剖)
对每一种宗教建立线段树,然后和普通树剖就没什么区别了 PS:为什么第二份会T啊#include<iostream>#include<cstdio>#include<cstring>#define M 6000005#define inf (1<<30)using namespace std;inline int read(){ int x=0,f=1;char ch=getc原创 2017-09-07 17:18:42 · 293 阅读 · 0 评论 -
bzoj2836魔法树 树剖
题目大意: 初始点权为0 支持路径修改+子树求和 用树剖水过去 路径修改:区间修改即可 子树求和:区间求和(pos[x],pos[x]+size[x]-1) PS:据说dfs也可以做#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,原创 2017-09-08 09:18:17 · 415 阅读 · 0 评论 -
bzoj2243[SDOI2011]染色 (树剖)
用线段树维护每段信息, 需要记录每段区间两端的颜色和段数,然后根据情况合并#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>原创 2017-09-08 11:24:01 · 397 阅读 · 0 评论 -
bzoj1036: [ZJOI2008]树的统计Count(树剖模版)
树剖入门题,有时间再写lct#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespace原创 2017-09-07 10:18:59 · 273 阅读 · 0 评论 -
bzoj3631: [JLOI2014]松鼠的新家 树链剖分||树形dp
题目大意: 每次对一条链进行区间修改,最后询问每个点的点权树剖裸题,似乎dfs序也可以做?有时间再补#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) f原创 2017-09-13 21:24:57 · 539 阅读 · 0 评论 -
bzoj 3038 线段树
维护一个标记,当值为0或1时便不用修改#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++) #define fod(i,a,b) for(int i=a;i>=b;i--)using name原创 2017-08-27 18:56:40 · 348 阅读 · 0 评论 -
【bzoj1103】[POI2007]大都市meg DFS序
可以发现每次修改实际上就是对于树的点权的修改,每次询问就是路径求和.利用DFS序的性质,实际上就是单点修改区间求和.对于修改(a#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define原创 2017-09-05 11:47:35 · 296 阅读 · 0 评论 -
Poj3221 dfs序
利用dfs序的子树连续的性质,用线段树单点修改,区间查询 PS:与子树修改,路径查询的dfs不同,一般不需要记录出栈序,只需要记录出栈位置#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#原创 2017-09-05 11:09:17 · 348 阅读 · 0 评论 -
bzoj 4034: [HAOI2015]树上操作(线段树+dfs序)
操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 用dfs序进栈+1出栈-1+线段树区间修改,查询维护 PS:线段树又写挂了,调试了很久啊~~#include<iostream>#include<cstdio>#include<cmath>#include<cs原创 2017-09-04 19:50:16 · 543 阅读 · 0 评论 -
Zoj 2112 线段树套Treap
树套树入门题 树套树空间复杂度分析:维护一个长度为n的序列,线段树的结点数一般为4n,而Treap则是对于每一个元素(包括重复出现的)都需要一个空间,那么第1层的所需要的空间为(1*n),第二层为(2*n/2)……所以其实为O(h)*n. 那么所需的空间为O(nlogn)O(nlogn)但在实际运用中,所形成的线段树往往不是完全二叉树,即最后一层并不满,所以上述空间会非常吃紧,所以一般为O(4n原创 2017-09-04 08:58:59 · 377 阅读 · 0 评论 -
poj 2299(权值线段树)
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<cstdlib>#include<queue>#include<vector>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) f原创 2017-08-08 11:31:11 · 457 阅读 · 0 评论 -
vijos 1083 小白的公园 线段树
题目大意:线段树维护区间最大连续和 思路:每一个区间的连续最大和可以分为三部分:左,右和跨越中间的连续一部分.前两个很好处理,对于第三个,它等于左区间的最右端的和+右区间的左端的和#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) fo原创 2017-08-27 21:07:39 · 329 阅读 · 0 评论