Cod sursa(job #343430)

Utilizator Marius96Marius Gavrilescu Marius96 Data 25 august 2009 21:07:04
Problema Zeap Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.48 kb
var n,x:longint;f,g:text;c:char;v:array[1..300000]of longint;

function caut(x:longint):longint;
var s,e,m:longint;
begin
s:=1;
e:=n;
while s<e do begin
m:=(s+e)div 2;
if v[m]=x then begin caut:=m;exit;end
else if v[m]>x then e:=m-1 else s:=m+1;
end;
if x<>v[s] then caut:=0 else caut:=s;
end;

procedure ins(x:longint);
var i,s,e,m:longint;
begin
if n=0 then begin n:=1;v[1]:=x;exit;end;
s:=1;
e:=n;
while s<e do begin
m:=(s+e)div 2;
if v[m]=x then exit
else if v[m]>x then e:=m-1 else s:=m+1;
end;
if x>v[s] then inc(s);
for i:=s to n do v[i+1]:=v[i];
inc(n);v[s]:=x;
end;

procedure del(x:longint);
var i,s,e,m:longint;
begin
s:=1;
e:=n;
while s<e do begin
m:=(s+e)div 2;
if v[m]=x then begin dec(n);for i:=m to n do v[i]:=v[i+1];exit;end
else if v[m]>x then e:=m-1 else s:=m+1;
end;
if x=v[m]then begin dec(n);for i:=m to n do v[i]:=v[i+1];exit;end;
writeln(g,-1);
end;

procedure min;
var i,m:longint;
begin
m:=v[2]-v[1];
for i:=3 to n do if v[i]-v[i-1]<m then m:=v[i]-v[i-1];
writeln(g,m);
end;

begin
assign(f,'zeap.in' );reset  (f);
assign(g,'zeap.out');rewrite(g);
while not eof(f) do begin
	read(f,c);
	case c of
		'I':begin read(f,x);ins(x);readln(f);end;
		'S':begin read(f,x);del(x);readln(f);end;
		'C':begin read(f,x);writeln(g,caut(x));readln(f);end;
		'M': if n<2 then writeln(g,-1)else begin
			readln(f,c);
			case c of
				'I':min;
				'A':writeln(g,v[n]-v[1]);
				end;
			end;
		end;
	end;
close(f);
close(g);
end.