Cod sursa(job #13362)
Utilizator | Data | 6 februarie 2007 13:46:29 | |
---|---|---|---|
Problema | Zeap | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 4.11 kb |
program zeap;
var z:array[1..300000] of longint;
f,g:text;
lz:longint;
procedure iofile;
begin
assign(f,'zeap.in');
reset(f);
assign(g,'zeap.out');
rewrite(g);
end;
function cbin(x,p,u:longint):byte;
var m:longint;
begin
if p=u then
begin
if z[p]<>x then
cbin:=0 else cbin:=1;
end else
begin
m:=(p+u) div 2;
if z[m]=x then
cbin:=1 else
begin
if x<z[m] then
cbin:=cbin(x,p,m-1) else
cbin:=cbin(x,m+1,u);
end;
end;
end;
procedure prel;
var s:string;
c:char;
vl,i,j,min:longint;
begin
while not eof(f) do
begin s:='';
repeat
read(f,c);
s:=s+c;
until (c=' ')or(c=#13)or(c=#26);
delete(s,length(s),1);
if s='I' then
begin
readln(f,vl);
i:=1;
while (z[i]<vl)and(i<=lz) do
inc(i);
for j:=lz downto i do
z[j+1]:=z[j];
z[i]:=vl;
inc(lz);
{if i<lz then
if abs(z[i+1]-z[i])<min then
min:=abs(z[i+1]-z[i]);
if i>1 then
if abs(z[i]-z[i-1])<min then
min:=z[i]-z[i-1]; }
end else
if s='C' then
begin
readln(f,vl);
writeln(g,cbin(vl,1,lz));
end else
if s='MIN' then
begin
min:=maxlongint;
if lz<2 then writeln(g,'-1') else
begin
for i:=1 to lz-1 do
if z[i+1]-z[i]<min then
min:=z[i+1]-z[i];
writeln(g,min);
end;
readln(f);end else
if s='MAX' then
begin
if lz<2 then
writeln(g,'-1')else
writeln(g,abs(z[1]-z[lz]));
readln(f); end else
if s='S' then
begin
readln(f,vl);
i:=1;
if cbin(vl,1,lz)=1 then
begin
while z[i]<>vl do
inc(i);
for j:=i to lz-1 do
z[j]:=z[j+1];
dec(lz);end else
writeln(g,'-1');
end;
end;
close(g);
end;
begin
iofile;
lz:=0;
prel;
end.