Cod sursa(job #558636)

Utilizator cont_de_testeCont Teste cont_de_teste Data 17 martie 2011 13:11:47
Problema Schi Scor 85
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.2 kb


var v, fin:array[1..30000] of longint;
    a:array[1..120100] of longint;
    i, j, n, x, y:longint;
    ok:boolean;
    f, g:text;

procedure act(k, st, dr:longint);
var mij:longint;
  begin
  if st >= x then a[k]:=a[k]+1
            else
    begin
    mij := (st+dr) div 2;
    if x <= mij then act(k*2, st, mij);
    act(k*2+1, mij+1, dr);
    end;
  end;

procedure caut (k, st, dr:longint);
var mij:longint;
  begin    if ( not ok ) then exit ;
  y:=y+a[k];
  if (st=dr) then
    begin
    if st=x+y then
      begin
      x:=x+y;
      fin[x]:=i;
      ok:=false; exit ;
      end;
    end
                        else
    begin
    mij := (st+dr) div 2;
    if x+y<= mij then
      begin
      caut (k*2, st, mij);
      y:=y-a[2*k];
      end;
    if ok then
      begin
      caut (k*2+1, mij+1, dr);
      y:=y-a[2*k+1];
      end;
    end;
  end;

begin
assign (f, 'schi.in'); reset (f);
assign (g, 'schi.out'); rewrite (g);
readln (f, n); for i := 1 to n do readln (f, v[i]);


for i := n downto 1 do
  begin
  x:= v[i];
  ok:=true; y:=0;
  caut(1, 1, n);
  act(1, 1, n);
  end;

for i := 1 to n do writeln (g, fin[i]);
close (f); close (g);
end.