Cod sursa(job #343428)

Utilizator Marius96Marius Gavrilescu Marius96 Data 25 august 2009 20:59:41
Problema Zeap Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.42 kb
var n,x:longint;f:text;c:char;v:array[1..10000]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(-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(m);
end;

begin
assign(f,'zeap.in');reset(f);
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(caut(x));readln(f);end;
		'M': if n<2 then writeln(-1)else begin
			readln(f,c);
			case c of
				'I':min;
				'A':writeln(v[n]-v[1]);
				end;
			end;
		end;
	end;
close(f);
end.