Pagini recente » Cod sursa (job #921471) | Cod sursa (job #178943) | Cod sursa (job #1246492) | Cod sursa (job #27541) | Cod sursa (job #116764)
Cod sursa(job #116764)
type pelem=^elem;
elem=record
info:longint;
next:pelem;
end;
var fi,fo:text;
lista,last:pelem;
s:string[15];
nr:longint;
e:integer;
numar:string[12];
i:byte;
c:char;
inserat:array[1..100000000]of char;
function maxim(first:pelem):longint;
var p:pelem;
max,min:longint;
begin
p:=first;
if p^.next=nil then begin writeln(fo,'-1'); exit; end;
max:=-maxint; min:=maxint;
while p<>nil do
begin
if p^.info>max then max:=p^.info;
if p^.info<min then min:=p^.info;
p:=p^.next;
end;
maxim:=max-min;
writeln(fo,maxim);
end;
function minim(first:pelem):longint;
var p:pelem;
min1,min2:longint;
begin
p:=first;
if p^.next=nil then begin writeln(fo,'-1'); exit; end;
min1:=maxint; min2:=maxint;
while p<>nil do
begin
if p^.info<min1 then
begin
min2:=min1;
min1:=p^.info; end
else
if p^.info<min2 then min2:=p^.info;
p:=p^.next;
end;
minim:=abs(min2-min1);
writeln(fo,minim);
end;
procedure inserare(var first:pelem; vl:longint);
var x:pelem;
begin
if inserat[vl]='.'then exit
else
begin
new(x);
x^.info:=vl; x^.next:=nil;
inserat[vl]:='.';
if first=nil then
begin
first:=x; last:=first; exit; end;
last^.next:=x;
last:=x;
end;
end;
function cauta(vl:longint):byte;
begin
if inserat[vl]='.' then cauta:=1
else cauta:=0;
end;
procedure sterge(var first:pelem; vl:longint);
var x,p:pelem;
begin
if cauta(vl)=0 then begin writeln(fo,'-1'); exit; end
else
begin
inserat[vl]:='a';
if first=nil then exit;
if first^.info=vl then
begin
x:=first;
first:=first^.next;
dispose(x);
exit; end;
x:=first;
while x^.next^.info<>vl do
x:=x^.next;
p:=x^.next;
x^.next:=p^.next;
dispose(p);
end;
end;
begin
assign(fi,'zeap.in'); reset(fi);
assign(fo,'zeap.out'); rewrite(fo);
while not eof(fi) do
begin
readln(fi,s);
if s='MAX' then maxim(lista)
else
if s='MIN' then minim(lista)
else
begin
c:=s[1];
numar:='';
for i:=3 to length(s) do
numar:=numar+s[i];
val(numar,nr,e);
if c='I' then inserare(lista,nr)
else
if c='S' then sterge(lista,nr)
else
writeln(fo,cauta(nr));
end;
end;
close(fi);
close(fo);
end.