bzoj1503[NOI2004]郁闷的出纳员 treap
2017-07-26 11:55
405 查看
换个打法,以前一直用指针,现在觉得太麻烦,借鉴ymwdalao的模板。
注意这里的删除不是真正的删除= =,delta是标记。
注意这里的删除不是真正的删除= =,delta是标记。
#include<cstdio> #include<algorithm> #include<cstring> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) using namespace std; const int N=1e5+5; struct treap { int k,s,l,r,num; }; int n,m,delya,size,root,tot,delta; treap t ; inline void rtl(int &x) { int y=t[x].r; t[x].r=t[y].l; t[y].l=x; t[x].s=t[t[x].l].s+t[t[x].r].s+1; t[y].s=t[t[y].l].s+t[t[y].r].s+1; x=y; } inline void rtr(int &x) { int y=t[x].l; t[x].l=t[y].r; t[y].r=x; t[x].s=t[t[x].l].s+t[t[x].r].s+1; t[y].s=t[t[y].l].s+t[t[y].r].s+1; x=y; } inline void ins(int &d,int x) { if (!d) { size++; t[size].l=t[size].r=0; t[size].k=x; t[size].s=1; t[size].num=rand(); d=size; return; } if (x<=t[d].k) { ins(t[d].l,x); if (t[t[d].l].num<t[d].num)rtr(d); } else { ins(t[d].r,x); if (t[t[d].r].num<t[d].num)rtl(d); } t[d].s=t[t[d].l].s+t[t[d].r].s+1; } inline void del(int &d) { if (!d)return; if (t[d].k+delta<m) { tot+=t[t[d].l].s+1; d=t[d].r; del(d); return; } del(t[d].l); t[d].s=t[t[d].l].s+t[t[d].r].s+1; } inline int find(int d,int k) { if (t[t[d].l].s==k-1)return t[d].k; if (t[t[d].l].s<k-1)return find(t[d].r,k-t[t[d].l].s-1); else return find(t[d].l,k); } int main() { scanf("%d%d",&n,&m); while (n--) { char w[1]; int x; scanf("%s%d",w,&x); if (w[0]=='I') { if (x>=m)ins(root,x-delta); } else if (w[0]=='A') { delta+=x; } else if (w[0]=='S') { delta-=x; del( 4000 root); } else { if (x>t[root].s||x==0) printf("%d\n",-1); else printf("%d\n",find(root,t[root].s-x+1)+delta); } } printf("%d\n",tot); }
相关文章推荐
- BZOJ 1503 [NOI2004] 郁闷的出纳员 treap
- BZOJ 1503: [NOI2004]郁闷的出纳员 treap
- bzoj1503[NOI2004]郁闷的出纳员 treap
- BZOJ 1503: [NOI2004]郁闷的出纳员 Treap
- 【BZOJ 1503】[NOI2004]郁闷的出纳员 treap
- bzoj 1503 [NOI2004]郁闷的出纳员 平衡树(treap/Splay)
- 【Splay|Treap】poj3580 SuperMemo && bzoj1503 [noi2004]郁闷的出纳员
- [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
- 【Treap/非旋转Treap】BZOJ1503 [NOI2004]郁闷的出纳员
- bzoj 1503: [NOI2004]郁闷的出纳员 平衡树treap
- bzoj 1503: [NOI2004]郁闷的出纳员 treap
- BZOJ 1503: [NOI2004]郁闷的出纳员 [treap]
- bzoj 1503: [NOI2004]郁闷的出纳员 Treap
- bzoj1503: [NOI2004]郁闷的出纳员 fhqtreap版
- 【BZOJ 1503】【NOI 2004】郁闷的出纳员
- bzoj 1503: [NOI2004]郁闷的出纳员
- BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树
- [bzoj 1503][NOI 2004]郁闷的出纳员(平衡树)
- 【bzoj1503】[NOI2004]郁闷的出纳员
- (WA)BZOJ 1503: [NOI2004]郁闷的出纳员