[BZOJ1861][Zjoi2006]Book 书架
来源:互联网 发布:淘宝账户怎么登录 编辑:程序博客网 时间:2024/05/22 02:19
原题地址
以极其缓慢的速度A题中…
快要开学辣预定计划还没完成怎么办OLZ…
AC code:
#include <cstdio>#include <cstdlib>const int N=80010;int n,m;struct nod{ int num,size,fix; nod *lc,*rc,*pr;}pool[N],*pt[N],*NIL;struct Treap{ nod *root; Treap(){ root=NIL=&pool[0]; } void update(nod *p){ p->size=p->lc->size+p->rc->size+1; } nod* merge(nod *p1,nod *p2){ if(p1==NIL) return p2; if(p2==NIL) return p1; if(p1->fix>p2->fix){ nod *p3=merge(p1->rc,p2); p3->pr=p1;p1->rc=p3; update(p1); return p1; } nod *p3=merge(p1,p2->lc); p3->pr=p2;p2->lc=p3; update(p2); return p2; } void split(nod *p,nod *&p1,nod *&p2,int k){ if(p==NIL){ p1=p2=NIL; return ; } if(p->lc->size+1>k){ split(p->lc,p1,p2,k); p->lc=p->pr=NIL; update(p); p2=merge(p2,p); } else{ split(p->rc,p1,p2,k-p->lc->size-1); p->rc=p->pr=NIL; update(p); p1=merge(p,p1); } } int getrank(nod *p){ int k=p->lc->size+1; while(p->pr!=NIL){ if(p->pr->rc==p) k+=p->pr->lc->size+1; p=p->pr; } return k; } void insert(int k,nod *p){ nod *p1,*p2; split(root,p1,p2,k); root=merge(merge(p1,p),p2); } void erase(int k){ nod *p1,*p2,*p3,*p4; split(root,p1,p2,k-1); split(p2,p3,p4,1); root=merge(p1,p4); } void getkth(int k){ nod *p1,*p2,*p3,*p4; split(root,p1,p2,k-1); split(p2,p3,p4,1); printf("%d\n",p3->num); root=merge(merge(p1,p3),p4); }};int main(){ scanf("%d%d",&n,&m); Treap T; for(int i=1;i<=n;i++){ pt[i]=&pool[i]; pt[i]->lc=pt[i]->rc=pt[i]->pr=NIL; pt[i]->num=i;pt[i]->size=1;pt[i]->fix=rand(); } for(int i=1;i<=n;i++){ int t; scanf("%d",&t); T.insert(i-1,pt[t]); } for(int i=1;i<=m;i++){ int x,y; char s[11]; scanf("%s%d",s,&x); if(s[0]=='T'){ T.erase(T.getrank(pt[x])); T.insert(0,pt[x]); } else if(s[0]=='B'){ T.erase(T.getrank(pt[x])); T.insert(n-1,pt[x]); } else if(s[0]=='I'){ scanf("%d",&y); int k=T.getrank(pt[x]); T.erase(k); T.insert(k-1+y,pt[x]); } else if(s[0]=='A') printf("%d\n",T.getrank(pt[x])-1); else T.getkth(x); } return 0;}
0 0
- [BZOJ1861][Zjoi2006]Book 书架
- [BZOJ1861] [Zjoi2006]Book 书架
- bzoj1861: [Zjoi2006]Book 书架
- BZOJ1861: [Zjoi2006]Book 书架
- bzoj1861: [Zjoi2006]Book 书架
- bzoj1861: [Zjoi2006]Book 书架
- bzoj1861 [Zjoi2006]Book 书架
- [BZOJ1861][Zjoi2006]Book 书架 && splay
- 【BZOJ1861】【Zjoi2006】Book 书架 Splay
- 【bzoj1861】[Zjoi2006]Book 书架 splay
- BZOJ1861: [Zjoi2006]Book 书架 Splay
- [bzoj1861][Zjoi2006]Book书架 splay
- 【ZJOI2006】bzoj1861 书架
- bzoj1861 book书架 splay
- Book 书架 Zjoi2006
- 1861: [Zjoi2006]Book 书架
- 1861: [Zjoi2006]Book 书架
- 1861: [Zjoi2006]Book 书架
- OpenCV学习笔记(1)—— 摄像机模型与标定2
- Linux framebuffer显示bmp图片
- hdu1870(愚人节的礼物)--- 简单栈类
- 互斥锁和条件变量
- 查询优化(一) @2012-06-02
- [BZOJ1861][Zjoi2006]Book 书架
- libgdx API之viewport:再也不用担心画面适配
- 关注程序员健康,刻不容缓
- Graphics主要方法
- 关于在MFC的picture控件里显示图片
- DOM_专有扩展
- 使用Hadoop的mapReduce实现计算单词数
- HDOJ1166 敌兵布阵(线段树)
- 修改PC密码.bat