1 (*
2 *Problem: NOI2004 郁闷的出纳员
3 *Author : Chen Yang
4 *Time : 2012.6.7 10:00 am
5 *State : AC
6 *Memo : treap
7 *)
8 program cashier;
9 const maxi=300000;
10 var
11 n,min,m,i,k,root,tot:longint;
12 p:char;
13 v,l,r,rand,s:array[0..maxi] of longint;
14 //===================
15 procedure l_rotate(var k:longint); inline;
16 var
17 y:longint;
18 begin
19 y:=r[k]; r[k]:=l[y]; l[y]:=k;
20 s[y]:=s[k]; s[k]:=s[l[k]]+s[r[k]]+1; k:=y;
21 end;
22 //===================
23 procedure r_rotate(var k:longint); inline;
24 var
25 y:longint;
26 begin
27 y:=l[k]; l[k]:=r[y]; r[y]:=k;
28 s[y]:=s[k]; s[k]:=s[l[k]]+s[r[k]]+1; k:=y;
29 end;
30 //===================
31 procedure insert(var k:longint; t:longint);
32 begin
33 if k=0 then
34 begin
35 inc(m); v[m]:=t; s[m]:=1;
36 rand[m]:=random(maxlongint);
37 k:=m; exit;
38 end;
39 inc(s[k]);
40 if t<=v[k] then
41 begin
42 insert(l[k],t);
43 if rand[l[k]]>rand[k] then r_rotate(k);
44 end else
45 begin
46 insert(r[k],t);
47 if rand[r[k]]>rand[k] then l_rotate(k);
48 end;
49 end;
50 //===================
51 procedure change(var k:longint; t:longint);
52 begin
53 if k=0 then exit;
54 inc(v[k],t);
55 if v[k]<min then
56 begin
57 change(r[k],t); k:=r[k];
58 end else
59 begin
60 change(l[k],t); change(r[k],t);
61 s[k]:=s[l[k]]+s[r[k]]+1;
62 end;
63 end;
64 //===================
65 function sele(k,t:longint):longint;
66 var
67 y:longint;
68 begin
69 if k=0 then exit(-1);
70 y:=s[r[k]]+1;
71 if t=y then exit(v[k]) else
72 if t>y then exit(sele(l[k],t-y)) else exit(sele(r[k],t));
73 end;
74 //===================
75 begin
76 assign(input,'cashier.in'); reset(input);
77 assign(output,'cashier.out'); rewrite(output);
78 readln(n,min);
79 for i:=1 to n do
80 begin
81 read(p); readln(k);
82 case p of
83 'I':if k>=min then begin insert(root,k); inc(tot); end;
84 'A':if k<>0 then change(root,k);
85 'S':if k<>0 then change(root,-k);
86 'F':writeln(sele(root,k));
87 end;
88 end;
89 writeln(tot-s[root]);
90 close(input); close(output);
91 end.