Cod sursa(job #558661)

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


var v, fin:array[1..30000] of longint;
    a:array[1..65536] of longint;
    i, j, n, x, y:longint;
    ok:boolean;
    f, g:text;
    Buf : Array[1 .. 1 shl 18] of byte;

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
  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); settextbuf ( f, buf ) ;
readln (f, n); for i := 1 to n do readln (f, v[i]);
close ( f ) ;

for i := n downto 1 do
  begin
  x:= v[i];
  ok:=true; y:=0;
  caut(1, 1, n);
  act(1, 1, n);
  end;
 assign ( g, 'schi.out'); rewrite ( g); settextbuf ( g, buf ) ;
for i := 1 to n do writeln (g, fin[i]);
close (g);
end.