Cod sursa(job #408583)

Utilizator saodem74hieu tran saodem74 Data 3 martie 2010 09:26:17
Problema Heapuri Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.71 kb
const tfi='heapuri.in';
      tfo='heapuri.out';
      maxn=200200;
var   fi,fo:text;
      nh,cnt,i,n,x,u,v:longint;
      vt,h,a:array[0..maxn] of longint;

procedure swap(var u,v:longint);
var tg:longint;
begin
  tg:=u; u:=v; v:=tg;
end;

procedure push(u:longint);
var cha,con:longint;
begin
  inc(nh);
  h[nh]:=u;
  vt[u]:=nh;
  con:=nh; cha:=con div 2;
  while (cha>0) and (a[h[cha]]>a[h[con]]) do
   begin
    swap(h[cha],h[con]);
    vt[h[cha]]:=cha;
    vt[h[con]]:=con;
    con:=cha;
    cha:=con div 2;
   end;
end;

procedure process1;
var i,j:longint;
    u,v:longint;
begin
  inc(cnt);
  read(fi,a[cnt]);
  push(cnt);
end;

procedure process3;
begin
  writeln(fo,a[h[1]]);
end;

procedure down(u:longint);
var v,cha,con:Longint;
begin
  v:=vt[u];
  h[v]:=h[nh];
  vt[h[v]]:=v;
  dec(nh);
  cha:=v; con:=cha*2;
  while con<=nh do
   begin
    if con<nh then
     if a[h[con]]>a[h[con+1]] then inc(con);
    if a[h[con]]>=a[h[cha]] then exit;
    swap(h[con],h[cha]);
    vt[h[con]]:=con;
    vt[h[cha]]:=cha;
    cha:=con;
    con:=cha*2;
   end;
end;

procedure up(u:longint);
var cha,con:longint;
begin
  con:=nh; cha:=con div 2;
  while (cha>0) and (a[h[cha]]>a[h[con]]) do
   begin
    swap(h[cha],h[con]);
    vt[h[cha]]:=cha;
    vt[h[con]]:=con;
    con:=cha;
    cha:=con div 2;
   end;
end;

procedure process2;
var i,j:longint;
  u,v:longint;
begin
  read(fi,u);
  down(u);
  up(u);
end;


begin
  assign(fi,tfi); reset(fi);
  assign(fo,tfo); rewrite(fo);
  read(Fi,n);
  for i:=1 to n do
   begin
    read(fi,x);
    if x=1 then process1 else
    if x=3 then process3
     else
      process2;
   end;
  close(Fi); close(Fo);
end.