Code: Select all
program p105;
var
cache:array[1..100,1..2] of integer;
l,h,r,n,size,k,t:integer;
procedure print_n_clear(j:integer);
{ ouput except the nth elements and so on remain; so does clear operation }
var i:integer;
begin
for i:=1 to j do write(cache[i][1],' ',cache[i][2],' ');
for i:=j+1 to size do begin
cache[i-j][1]:=cache[i][1]; cache[i-j][2]:=cache[i][2];
end;
size:=size-j;
end;
procedure insert(a,b,loct:integer);
var i:integer;
begin
for i:=size downto loct do begin
cache[i+1][1]:=cache[i][1]; cache[i+1][2]:=cache[i][2]; end;
cache[loct][1]:=a; cache[loct][2]:=b; inc(size);
end;
begin
fillchar(cache,sizeof(cache),0);
read(l,h,r); cache[1][1]:=l; cache[1][2]:=h;
cache[2][1]:=r; cache[2][2]:=0; size:=2;
while not eof do begin
read(l,h,r);
n:=1; while (n<=size) and (l>cache[n][1]) do inc(n);
if n=size+1 then begin
print_n_clear(size); cache[1][1]:=l; cache[1][2]:=h;
cache[2][1]:=r; cache[2][2]:=0; size:=2;
end
else begin
if cache[n-1][2]<h then begin
if cache[n][1]>r then begin
insert(r,cache[n-1][2],n); insert(l,h,n);
end
else if cache[n][1]<r then begin
insert(l,h,n); inc(n);
while (n<=size) and (r>cache[n][1]) do begin
h:=cache[n][2];
for k:=n to size-1 do begin
cache[k][1]:=cache[k+1][1]; cache[k][2]:=cache[k+1][2]; end;
dec(size); end;
if n=size+1 then begin cache[n][1]:=r;
cache[n][2]:=0; inc(size); end
else insert(r,h,n);
end
end
else if cache[n-1][2]>h then begin
if cache[n][1]<r then
if cache[n][2]<h then begin
t:=cache[n][2]; cache[n][2]:=h; h:=t; inc(n);
while (n<=size) and (r>cache[n][1]) do begin
h:=cache[n][2];
for k:=n to size-1 do begin
cache[k][1]:=cache[k+1][1]; cache[k][2]:=cache[k+1][2]; end;
dec(size); end;
if (n=size+1) then insert(r,0,n)
else insert(r,h,n);
end
else begin
t:=cache[n][2]; n:=n+1;
while (n<=size) and (r>cache[n][1]) do begin
if cache[n][2]<h then begin
t:=cache[n][2]; cache[n][2]:=h; end;
inc(n);
end;
if n=size+1 then insert(r,0,n)
else insert(r,t,n);
end;
end;
end;
end;
print_n_clear(size);
end.