题目:郁闷的出纳员
思路:平衡树的题,可以用vector模拟。因为A和S操作很小,所以直接循环一遍不会超时。
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 100000
#define read(x) scanf("%d",&x)
int m;
vector<int> vec;
int main() {
int T,ans=0;
read(T),read(m);
while(T--) {
char opr;int k;
while((~scanf("%c",&opr))&&!isalpha(opr));
read(k);
if(opr=='I') {
if(k<m) continue;
vec.insert(lower_bound(vec.begin(),vec.end(),k),k);
} else if(opr=='A') {
for(int i=0;i<vec.size();i++) vec[i]+=k;
} else if(opr=='S') {
for(int i=0;i<vec.size();i++) {
vec[i]-=k;
if(vec[i]<m) {
vec.erase(lower_bound(vec.begin(),vec.end(),vec[i]));
i--,ans++;
}
}
} else {
if((int)vec.size()>=k) printf("%d\n",vec[(int)vec.size()-k]);
else printf("-1\n");
}
}
printf("%d",ans);
return 0;
}