|
- program lt;
- var n,m,num,p,i,k,code,head:longint;
- key,left,right,s:array[1..100000] of longint;
- ss:string;
- procedure left_rotate(var x:longint);
- var y:longint;
- begin
- y:=right[x];
- right[x]:=left[y];
- left[y]:=x;
- s[y]:=s[x];
- s[x]:=s[left[x]]+s[right[x]]+1;
- x:=y;
- end;
- procedure right_rotate(var x:longint);
- var y:longint;
- begin
- y:=left[x];
- left[x]:=right[y];
- right[y]:=x;
- s[y]:=s[x];
- s[x]:=s[left[x]]+s[right[x]]+1;
- x:=y;
- end;
- procedure maintain(var t:longint;flag:boolean);
- begin
- if flag then
- if s[right[right[t]]]>s[left[t]] then
- left_rotate(t)
- else
- if s[left[right[t]]]>s[left[t]] then
- begin
- right_rotate(right[t]);
- left_rotate(t);
- end
- else exit
- else
- if s[left[left[t]]]>s[right[t]] then
- right_rotate(t)
- else
- if s[right[left[t]]]>s[right[t]] then
- begin
- left_rotate(left[t]);
- right_rotate(t);
- end
- else exit;
- maintain(left[t],false);
- maintain(right[t],true);
- maintain(t,false);
- maintain(t,true);
- end;
- procedure insert(k:longint;var t:longint);
- begin
- if t=0 then
- begin
- inc(num);
- t:=num;
- s[t]:=1;
- left[t]:=0;right[t]:=0;
- key[t]:=k;
- end
- else
- begin
- inc(s[t]);
- if k<key[t] then insert(k,left[t]) else insert(k,right[t]);
- maintain(t,k>=key[t]);
- end;
- end;
- function delete(k:longint;var t:longint):longint;
- begin
- dec(s[t]);
- if (k=key[t])or(k<key[t])and(left[t]=0)or(k>key[t])and(right[t]=0) then
- begin
- delete:=key[t];
- if (left[t]=0) or (right[t]=0) then t:=left[t]+right[t]
- else key[t]:=delete(k+1,left[t]);
- end
- else
- if k<key[t] then delete:=delete(k,left[t])
- else delete:=delete(k,right[t]);
- end;
- procedure select(k:longint;var t:longint);
- begin
- if k=s[left[t]]+1 then
- begin
- writeln(key[t]);
- p:=delete(key[t],head);
- end
- else if k<=s[left[t]] then select(k,left[t])
- else select(k-1-s[left[t]],right[t]);
- end;
- begin
- assign(input,'arr.in');
- assign(output,'arr.out');
- reset(input);
- rewrite(output);
- readln(n,m);
- head:=0;
- for i:=1 to m do
- begin
- readln(ss);
- val(copy(ss,3,length(ss)-2),k,code);
- if ss[1]='i' then insert(k,head)
- else select(k,head);
- end;
- close(input);
- close(output);
- end.
|