救我,救我,救我,灵异事件

P1486 [NOI2004] 郁闷的出纳员

```cpp /* Author: EnderDeer Online Judge: Luogu */ #include<bits/stdc++.h> #define int long long #define mem(x) memset(x,0,sizeof(x)) using namespace std; int read(){ int s = 0,w = 1; char ch = getchar(); while(ch < '0' || ch > '9'){if(ch == '-')w = -1;ch = getchar();} while(ch >= '0' && ch <= '9')s = s * 10 + ch - '0',ch = getchar(); return s * w; } mt19937 rnd(time(0)); struct node{ int l; int r; int w; int key; int siz; }e[300010]; int cnt,rt; int tot; int lazy; int ans; int newnode(int w){ cnt ++; e[cnt].w = w; e[cnt].key = rnd(); e[cnt].siz = 1; return cnt; } void update(int i){ e[i].siz = e[e[i].l].siz + e[e[i].r].siz + 1; } void split(int i,int w,int &x,int &y){ if(!i){ x = y = 0; return ; } if(e[i].w <= w){ x = i; split(e[i].r,w,e[i].r,y); } else { y = i; split(e[i].l,w,x,e[i].l); } update(i); } int merge(int x,int y){ if(!x || !y)return x + y; if(e[x].key > e[y].key){ e[x].r = merge(e[x].r,y); update(x); return x; } else { e[y].l = merge(x,e[y].l); update(y); return y; } } int x,y,z; void ins(int w){ tot ++; split(rt,w,x,y); rt = merge(merge(x,newnode(w)),y); } void del(int w){ tot --; split(rt,w,x,z); split(x,w - 1,x,y); y = merge(e[y].l,e[y].r); rt = merge(merge(x,y),z); } int getnum(int rk){ int now = rt; while(now){ if(e[e[now].l].siz + 1 == rk)break; else if(e[e[now].l].siz >= rk)now = e[now].l; else { rk -= e[e[now].l].siz + 1; now = e[now].r; } } return e[now].w; } int n,minn; void pushdown(int x){ e[x].w += lazy; if(e[x].w < minn){ del(e[x].w); ans ++; } if(e[x].l)pushdown(e[x].l); if(e[x].r)pushdown(e[x].r); } signed main(){ cin>>n>>minn; for(int i = 1;i <= n;i ++){ char op; int k; scanf(" %c ",&op); k = read(); if(op == 'I'){ if(k < minn)continue; else { ins(k); pushdown(rt); lazy = 0; } } else if(op == 'A'){ lazy += k; } else if(op == 'S'){ lazy -= k; } else { pushdown(rt); if(k > tot)puts("-1"); else printf("%lld\n",getnum(k)); } } cout<<ans; return 0; } ```
by EDqwq @ 2021-02-22 11:02:15


检查数组越界
by AzusaCat @ 2021-02-22 11:05:23


@[林深时x见鹿](/user/294562) 检查数组越界和函数内变量初值
by Retired_lvmao @ 2021-02-22 11:19:24


~~显然没有全局变量的数不赋值就会rand~~
by 听取MLE声一片 @ 2021-02-22 11:20:00


@[林深时x见鹿](/user/294562) 你treap写挂了,因为每次随机种子不一样所以挂的不一样,把time(0)删掉就不输出随机数了
by gxy001 @ 2021-02-22 11:23:06


@[林深时x见鹿](/user/294562) 显然平衡树写挂了呗,毕竟fhq是需要 rand的
by Leap_Frog @ 2021-02-22 11:23:56


好的,谢谢大家
by EDqwq @ 2021-02-22 11:58:17


|