Pagini recente » Cod sursa (job #673708) | Cod sursa (job #1586024) | Cod sursa (job #2407232) | Cod sursa (job #1453906) | Cod sursa (job #6340)
Cod sursa(job #6340)
program zeap1;
type pnod=^nod;
nod=record
i:longint;
urm:pnod;
end;
var v:array[1..300000]of boolean;
f,g:Text;
n,k,max:longint;
p,q,r:pnod;
c:char;
begin
assign(f,'zeap.in'); reset(f);
assign(g,'zeap.out'); rewrite(g);
n:=0;
max:=-1;
while not eof(f) do
begin
read(f,c);
case c of
'I':
begin
readln(f,k);
if
max<k then max:=k;
if not v[k] then
begin
if n=0 then
begin
new(p);
p^.i:=k;
p^.urm:=nil;
end
else
begin
q:=p;
while q^.urm^.i<k do q:=q^.urm;
new(r);
if k<q^.i then
begin
r^.i:=q^.i;
r^.urm:=q^.urm;
q^.i:=k;
q^.urm:=r;
end
else
begin
r^.urm:=q^.urm;
r^.i:=k;
q^.urm:=r;
end;
end;
v[k]:=true;
inc(n);
end;
end;
'S':
begin
read(f,k);
if v[k] then
begin
q:=p;
dec(n); v[k]:=false;
if p^.i=k then
begin
p:=p^.urm;
if n>0 then max:=p^.i
else max:=-1;
dispose(q);
end
else
begin
while q^.urm^.i<>k do q:=q^.urm;
r:=q^.urm;
if q^.urm^.i=max then
if q^.urm^.urm<> nil then max := q^.urm^.urm^.i
else max:=q^.i;
q^.urm:=q^.urm^.urm;
dispose(r);
end
end
else writeln(f,-1);
end;
'C':
begin
readln(f,k);
if v[k] then writeln(g,1)
else writeln(g,0);
end;
'M':
begin
readln(f,c);
if c='A' then
if n>1 then writeln(g,abs(max-p^.i))
else writeln(g,-1)
else
if n>1 then writeln(g,abs(p^.i-p^.urm^.i))
else writeln(g,-1);
end;
end;
end;
close(g);
close(f);
end.