数据结构
ShɑΙteж
think twice,code once
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线段树杂题
http://acm.hdu.edu.cn/showproblem.php?pid=1542 #include<bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);i++) using namespace std; const int N=1e5; struct node{double l,r,h;int tag;};...原创 2018-11-05 17:48:24 · 183 阅读 · 0 评论 -
[SHOI2016]随机序列 线段树
[SHOI2016] 写几组例子可以发现对答案产生贡献的只有一段前缀的连乘,因为只要从这个地方断开就会有+,-两种符号相互抵消,对答案的贡献就是0,然后问题就变成了区间修改,线段树即可 #include<bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define per(i,a,b) for(int ...原创 2019-03-25 10:19:40 · 305 阅读 · 0 评论 -
[CF343D]Water Tree 树链剖分
[CF343D] 模板题,没啥好说的 注意线段树空间 #include<bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);i++) using namespace std; const int N=2<<19; struct node{int y,n;}e[N<<1]; int lin[N&...原创 2019-03-12 21:04:21 · 240 阅读 · 0 评论 -
[SP3267]DQUERY - D-query 主席树
[SP3267] 就是区间内本质不同数的计数的在线做法 每个颜色x记录一个last[x]表示改颜色上一次出现的位置,每次把last[x]的位置-1,x现在的位置+1,保证本质不同的数贡献为1 每次修改两条链,需要建一个辅助根节点 #include<bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);i++) #de...原创 2019-03-12 07:43:03 · 274 阅读 · 0 评论 -
[BZOJ5319]军训列队 主席树+二分
[BZOJ5319] 显然对于一个询问,我们应该将被询问的人以及询问的位置排序后一一匹配 也就是排序后求 \sum=|Ai−Bi| 由于人的位置互不相同,所以A数组是递增的,而B数组是连续的一段整数,因此Ai与Bi的大小关系只有可能由小于到大于变化一次 对原序列建立主席树,询问时在对应区间上二分出大小关系变化的位置,前后用区间和计算答案即可 时间复杂度O((n+m)logk) Cod...原创 2019-03-11 19:45:11 · 205 阅读 · 0 评论 -
动态逆序对 BIT套线段树
动态逆序对 Code #include<bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define ll long long using namespace std; const int N=4e5; const int M=3e7+100; int root[M],sum[M],pos[N],lc...原创 2019-02-22 14:08:13 · 257 阅读 · 0 评论 -
高级数据结构模板
可持久化并查集[BZOJ3673] #include<bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define per(i,a,b) for(int i=(a);i>=(b);i--) using namespace std; const int N=2e4*20; int lc[N],rc[...原创 2019-02-10 17:11:56 · 390 阅读 · 0 评论 -
[BZOJ3165]线段树标记永久化
[BZOJ3165] Code #include<bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define pdd pair<double,double> #define se second #define fi first using namespace std; const int...原创 2019-02-10 15:06:30 · 396 阅读 · 0 评论 -
堆的原理及实现
插入 void put(int d) { int now,next; heap[++heap_size]=d; now=heap_size; while(now>1) { next=now/2; if(heap[now]>heap[next]) break;//小根堆 swap(heap[now],heap[next]); now=next; } } 删...原创 2018-03-12 10:00:08 · 403 阅读 · 0 评论 -
线段树暴力
#include<bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define per(i,a,b) for(int i=(a);i>=(b);i--) #define ll long long using namespace std; const ll inf=1e8; const int N=2...原创 2019-04-03 19:03:48 · 322 阅读 · 0 评论
分享