首页 > 代码库 > 【不可能的任务22/200】【填坑】bzoj3224 splay裸题
【不可能的任务22/200】【填坑】bzoj3224 splay裸题
人生第一道splay不出所料是一道裸题,一道水题,一道2k代码都不到的题
1 #include <cstdio> 2 int root,N=0,n,p,q; 3 int fa[100001],c[100001][2],size[100001],sp[100001]; 4 void rot(int x) 5 { 6 int y=fa[x],k=(c[y][0]==x); 7 size[y]=size[c[y][k]]+size[c[x][k]]+1;size[x]=size[c[x][!k]]+size[y]+1; 8 c[y][!k]=c[x][k];fa[c[y][!k]]=y; 9 fa[x]=fa[y];if(fa[y])c[fa[y]][c[fa[y]][1]==y]=x;10 c[x][k]=y;fa[y]=x;11 }12 void rots(int x,int g)13 {14 for(int y=fa[x];y!=g;rot(x),y=fa[x])15 if(fa[y]!=g) rot((x==c[y][0])==(y==c[fa[y]][0])?y:x);16 if(g==0) root=x;17 }18 void insert(int x)19 {20 int y=root;21 while(c[y][x>sp[y]]) y=c[y][x>sp[y]];22 sp[++N]=x;c[N][0]=c[N][1]=0;fa[N]=y;if(y)c[y][x>sp[y]]=N;23 rots(N,0);24 }25 void del(int x)26 {27 int y=root;28 while(sp[y]!=x) y=c[y][x>sp[y]];29 rots(y,0);y=c[root][1];30 bool b;31 if(!y) b=1,y=c[root][0];else b=0;32 while(c[y][b]) y=c[y][b];33 rots(y,root);34 c[y][b]=c[root][b];fa[c[root][b]]=y;fa[y]=0;root=y;35 size[y]=size[c[y][!b]]+size[c[y][b]];36 }37 int rank(int x)38 {39 int y=root,ans=0;40 if(x==918145){41 printf("");42 }43 while(y)44 if(x>sp[y])45 ans+=size[c[y][0]]+1,y=c[y][1];46 else y=c[y][0];47 return ans+1;48 }49 int num(int x)50 {51 int y=root;52 while(x)53 if(size[c[y][0]]+1<x)54 x-=size[c[y][0]]+1,y=c[y][1];55 else if(size[c[y][0]]+1==x) return sp[y];56 else y=c[y][0];57 return sp[y];58 }59 int pre(int x)60 {61 int ans;62 for(int y=root;y;)63 if(sp[y]<x)64 ans=sp[y],y=c[y][1];65 else y=c[y][0];66 return ans;67 }68 int nex(int x)69 {70 int ans;71 for(int y=root;y;)72 if(sp[y]<=x)73 y=c[y][1];74 else ans=sp[y],y=c[y][0];75 return ans;76 }77 int main()78 {79 freopen("1.out","w",stdout);80 scanf("%d",&n);81 for(int i=1;i<=n;i++)82 {83 scanf("%d%d",&p,&q);84 if(p==1) insert(q);85 if(p==2) del(q);86 if(p==3) printf("%d\n",rank(q));87 if(p==4) printf("%d\n",num(q));88 if(p==5) printf("%d\n",pre(q));89 if(p==6) printf("%d\n",nex(q));90 }91 return 0;92 }
貌似所有该犯的问题都犯了一遍了,,,感觉自己逻辑不够严谨啊
难道要背板???那么长感觉下不来啊
【不可能的任务22/200】【填坑】bzoj3224 splay裸题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。