bzoj 3223 splay模板题3】的更多相关文章

水题...貌似理解splay怎么维护数列了... 每个点维护一个size,它的位置就是它的size,区间翻转的话可以打标记,find的时候push_down,交换左右子树. #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define N 100005 #define lc(x) ch[x][0] #define rc(x) ch[x][1] using n…
用晚自习学了一下splay模板,没想象中那么难,主要是左旋和右旋可以简化到一个函数里边,减少代码长度... #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 33333 #define inf 0x3f3f3f3f #define lc(x) ch[(x)][0] #define rc(x) ch[(x)][1] using names…
再刷水题我就废了... #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define lc(x) ch[x][0] #define rc(x) ch[x][1] #define inf 0x3f3f3f3f #define N 200005 using namespace std; ]; int k[N];int cnt,root; int size[N],…
自己yy了找前驱和后继,学了学怎么删除...(反正就是练模板) #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define N 80005 #define lc(x) ch[x][0] #define rc(x) ch[x][1] #define inf 0x3f3f3f3f using namespace std; ],size,ch[N*][],roo…
我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排名,查询区间某个值值前驱.后继.查询第k小值是log^3(n)的,其他都是log^2(n)的 #include <cstdio> using namespace std; ,inf=; ],root[],left,right,tot,son[maxn][]; int mmin(int x,int…
转啊转终于转出来了,然而我的模板跟陈竞潇学长的模板一模一样,还是太弱啊,第一次用指针. #include<cstdio> #include<cstring> #include<algorithm> #define for1(i,a,b) for(int i=(a);i<=(b);++i) using namespace std; typedef long long ll; ; int n,m,data[N]; struct node{ node(); node *…
题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对值小就好啦 #include<cstdio> #include<algorithm> #include<cstring> #define N 800010 #define MOD 1000000 #define which(x) (ls[fa[(x)]]==(x)) typ…
思路: 区间翻转的裸题 终于tm理解splay了-- //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 155555 int n,m,root,size[N],ch[N][2],fa[N],rev[N],v[N]; void push_up(int x){size[x]=size[ch[x][0]]+size[ch…
Treap: //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int size,n,xx,root,ans,tmp; struct Treap{int ch[2],v,cnt,rnd,sz;}tr[500050]; void Upd(int k){tr[k].sz=tr[tr[k].ch[0]].sz+tr[tr[k].ch[1]].sz+tr[k].cnt;} void rot(…
Treap: //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int n,op,xx,ans,size,root; struct Treap{int ch[2],v,cnt,rnd,sz;}tr[300000]; void Upd(int k){tr[k].sz=tr[k].cnt+tr[tr[k].ch[0]].sz+tr[tr[k].ch[1]].sz;} void rot(i…