Cod sursa(job #13362)

Utilizator vanila0406Ionescu Victor vanila0406 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.