bzoj1895 Pku3580 supermemo splay
2016-12-12 20:30
459 查看
裸splay。
写这篇文章的目的在于说明我是一个智障。
woc函数又没写return,被各种编译器坑惨。。。
开-Wall
开-Wall
开-Wall。。。。
写这篇文章的目的在于说明我是一个智障。
woc函数又没写return,被各种编译器坑惨。。。
开-Wall
开-Wall
开-Wall。。。。
#include <bits/stdc++.h> using namespace std; #define N 510000 #define ls(x) ch[x][0] #define rs(x) ch[x][1] #define which(x) (ch[fa[x]][1]==x) #define inf ~0U>>1 int n,m,cnt,root,lp,rp; char s[11]; int ch [2],a ; int val ,ad ,size ,rev ,mn ,fa ; void pushup(int x) { mn[x]=min(mn[ls(x)],mn[rs(x)]); mn[x]=min(mn[x],val[x]); size[x]=size[ls(x)]+size[rs(x)]+1; } int build(int l,int r) { if(l>r)return 0; int mid=(l+r)>>1,now=++cnt; if(mid==0||mid==n+1)val[now]=inf; else val[now]=a[mid]; size[now]=1; ls(now)=build(l,mid-1); rs(now)=build(mid+1,r); fa[ls(now)]=fa[rs(now)]=now; pushup(now); return now; } void reverse(int x) { swap(ch[x][0],ch[x][1]); rev[x]^=1; } void add(int x,int v) { ad[x]+=v; if(mn[x]!=inf)mn[x]+=v; if(val[x]!=inf)val[x]+=v; } void pushdown(int x) { if(rev[x]) { reverse(ls(x)); reverse(rs(x)); rev[x]^=1; } if(ad[x]) { add(ls(x),ad[x]); add(rs(x),ad[x]); ad[x]=0; } } void down(int x) { if(fa[x])down(fa[x]); pushdown(x); } void rotate(int x) { int y=fa[x],k=which(x); ch[y][k]=ch[x][k^1]; ch[x][k^1]=y; ch[fa[y]][which(y)]=x; fa[x]=fa[y];fa[y]=x; fa[ch[y][k]]=y; pushup(y);pushup(x); } void splay(int x,int tar) { down(x); while(fa[x]!=tar) { int y=fa[x]; if(fa[y]==tar)rotate(x); else { if(which(x)^which(y)) rotate(x); else rotate(y); rotate(x); } } if(tar==0)root=x; } int rank(int x,int K) { pushdown(x); if(size[ls(x)]+1==K) return x; if(size[ls(x)]>=K) return rank(ls(x),K); return rank(rs(x),K-size[ls(x)]-1); } int get(int l,int r) { lp=rank(root,l);rp=rank(root,r); splay(lp,0);splay(rp,lp); return ch[rp][0]; } int read() { char ch;int ret=0; for(ch=getchar();!isdigit(ch);ch=getchar()); for(;isdigit(ch);ch=getchar()) ret=ret*10+ch-'0'; return ret; } int main() { n=read();mn[0]=inf; for(int i=1;i<=n;i++)a[i]=read(); root=build(0,n+1); m=read(); for(int i=1,x,y,T;i<=m;i++) { scanf("%s",s+1); if(s[1]=='A') { x=read();y=read();T=read();x++;y++; add(get(x-1,y+1),T); } else if(s[1]=='I') { x=read();y=read();x++; get(x,x+1); ch[rp][0]=++cnt;fa[cnt]=rp; size[cnt]=1;val[cnt]=mn[cnt]=y; pushup(rp);pushup(lp); } else if(s[1]=='D') { x=read();x++; get(x-1,x+1);ch[rp][0]=0; pushup(rp);pushup(lp); } else if(s[1]=='M') { x=read();y=read();x++;y++; printf("%d\n",mn[get(x-1,y+1)]); } else if(s[4]=='E') { x=read();y=read();x++;y++; reverse(get(x-1,y+1)); } else { x=read();y=read();T=read();x++;y++; T=(T%(y-x+1)+(y-x+1))%(y-x+1); if(!T)continue; int p1=rank(root,y),p2=rank(root,y+1); int t=get(x-1,y-T+1); down(t);ch[rp][0]=0; pushup(rp);pushup(lp); splay(p1,0);splay(p2,p1); down(p2);ch[p2][0]=t;fa[t]=p2; pushup(p2);pushup(p1); } } return 0; }
相关文章推荐
- BZOJ1895: Pku3580 supermemo Splay
- bzoj1895: Pku3580 supermemo
- bzoj 1895: Pku3580 supermemo (splay)
- 【bzoj1895】Pku3580 supermemo Splay
- 【bzoj1895】Pku3580 supermemo
- 【BZOJ1895】Pku3580 supermemo Splay
- bzoj1895: Pku3580 supermemo
- [bzoj1895][Pku3580]supermemo_非旋转Treap
- [BZOJ 1895]Pku3580 supermemo:Splay
- BZOJ_1895_Pku3580 supermemo_Splay
- 【splay】【bzoj 1895】: Pku3580 supermemo
- [BZOJ1895]Pku3580 supermemo(splay)
- bzoj1895 Pku3580 supermemo(splay)
- BZOJ 1895 & POJ 3580 supermemo (splay)
- bzoj 1895||poj3580
- BZOJ 1895 & POJ 3580 supermemo [SPLAY]【数据结构】
- BZOJ_5369_[Pkusc2018]最大前缀和_状压DP
- BZOJ 1460: Pku2114 Boatherds 点分治
- [bfs 分层图 字典序 最短路] BZOJ 2644 Pku3967 Ideal Path
- BZOJ1954 Pku3764 The xor-longest Path