1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=300010;
4 int n,M,tot1,res,ch[N][2],fa[N],size[N],root,k[N],det;
5 inline void pushdown(int x) {
6 if(x) size[x]=size[ch[x][0]]+size[ch[x][1]]+1;
7 }
8 inline void zig(int x) {
9 int y=fa[x],z=fa[y];
10 fa[y]=x;fa[x]=z;
11 ch[y][0]=ch[x][1];fa[ch[x][1]]=y;
12 ch[x][1]=y;
13 if(y==ch[z][0]) ch[z][0]=x;
14 else ch[z][1]=x;
15 pushdown(y);
16 }
17 inline void zag(int x) {
18 int y=fa[x],z=fa[y];
19 fa[y]=x;fa[x]=z;
20 ch[y][1]=ch[x][0];fa[ch[x][0]]=y;
21 ch[x][0]=y;
22 if(y==ch[z][0]) ch[z][0]=x;
23 else ch[z][1]=x;
24 pushdown(y);
25 }
26 inline void splay(int x,int s) {
27 while(fa[x]!=s) {
28 int y=fa[x],z=fa[y];
29 if(z==s) {
30 if(x==ch[y][0]) zig(x);
31 else zag(x);
32 break;
33 }
34 if(y==ch[z][0]) {
35 if(x==ch[y][0]) zig(y),zig(x);
36 else zag(x),zig(x);
37 }
38 else {
39 if(x==ch[y][1]) zag(y),zag(x);
40 else zig(x),zag(x);
41 }
42 }
43 pushdown(x);
44 if(s==0) root=x;
45 }
46 inline void newnode(int &x,int fax,int key) {
47 x=++tot1;
48 ch[x][0]=ch[x][1]=0;
49 fa[x]=fax;
50 k[x]=key;size[x]=1;
51 }
52 /*void debug(int r)
53 {
54 if(!r)return;
55 printf("KEY=%d NODE=%d Lchild=%d Rchild=%d Size=%d\n",k[r],r,ch[r][0],ch[r][1],size[r]);
56 debug(ch[r][0]);
57 debug(ch[r][1]);
58 } */
59 inline void ins(int x) {
60 int p=root,f=0;
61 while(p) {
62 if(k[p]>=x) f=p,p=ch[p][0];
63 else f=p,p=ch[p][1];
64 }
65 newnode(p,f,x);
66 if(k[f]<x) ch[f][1]=p;
67 else ch[f][0]=p;
68 splay(p,0);
69 pushdown(root);
70 }
71 inline void inc(int x) {det+=x;}
72 inline void dec(int x) {
73 det-=x;
74 ins(M-det);
75 res+=size[ch[root][0]];
76 //cout<<"********"<<res<<endl;
77 root=ch[root][1];
78 fa[root]=0;
79 pushdown(root);
80 }
81 int getk(int r,int kx) {
82 int t=size[ch[r][0]]+1;
83 if(t==kx) return r;
84 if (t>kx) return getk(ch[r][0],kx);
85 return getk(ch[r][1],kx-t);
86 }
87 void findx(int kx) {
88 if(size[root]<kx) {
89 printf("-1\n");
90 return;
91 }
92 printf("%d\n",k[getk(root,size[root]-kx+1)]+det);
93 }
94 int main() {
95 scanf("%d%d",&n,&M);
96 char op[5];
97 int ka;
98 det=res=0;
99 while(n--) {
100 //debug(root);
101 scanf("%s%d",op,&ka);
102 if(op[0]==‘I‘&&ka>=M) ins(ka-det);
103 else if(op[0]==‘A‘) inc(ka);
104 else if(op[0]==‘S‘) dec(ka);
105 else if(op[0]==‘F‘) findx(ka);
106 }
107 printf("%d\n",res);
108 return 0;
109 }