Cod sursa(job #558540)

Utilizator andreifirstCioara Andrei Ioan andreifirst Data 17 martie 2011 12:31:04
Problema Schi Scor 70
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.26 kb
type buf=array[1..1 shl 17] of char;

var v, fin:array[1..30000] of integer;
    a:array[1..65536] of integer;
    buf1, buf2:buf;
    i, j, n, x, y:integer;
    ok:boolean;
    f, g:text;

procedure act(k, st, dr:integer);
var mij:integer;
  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:integer);
var mij:integer;
  begin
  y:=y+a[k];
  if (st=dr) then
    begin
    if st=x+y then
      begin
      x:=x+y;
      fin[x]:=i;
      ok:=false;
      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'); settextbuf (f, buf1); reset (f);
assign (g, 'schi.out'); settextbuf (f, buf2); rewrite (g);
read (f, n); for i := 1 to n do read (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.