Cod sursa(job #59791)

Utilizator vanila0406Ionescu Victor vanila0406 Data 10 mai 2007 15:37:56
Problema Schi Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.89 kb
{$IFDEF NORMAL}
  {$I-,OBJECTCHECKS-,Q-,R-,S-}
{$ENDIF NORMAL}
{$IFDEF DEBUG}
  {$I+,OBJECTCHECKS-,Q+,R+,S-}
{$ENDIF DEBUG}
{$IFDEF RELEASE}
  {$I-,OBJECTCHECKS-,Q-,R-,S-}
{$ENDIF RELEASE}
program schi;
var f,g:text;
        a:array[1..100000] of longint;
        n:longint;
        vp,v:array[1..30000] of longint;



procedure iofile;
var i:longint;
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]);
        close(f);
end;

procedure init(st,dr,p:longint);
var m:longint;
begin
        a[p]:=dr-st+1;
        if st<dr then
                begin
                        m:=(st+dr) div 2;
                        init(st,m,2*p);
                        init(m+1,dr,2*p+1);
                end;
end;



procedure update(st,dr,p,x:longint);
var m:longint;
begin
        dec(a[p]);
        if st<dr then
                begin
                        m:=(st+dr) div 2;
                        if x>m then update(m+1,dr,2*p+1,x) else
                        update(st,m,2*p,x);
                end;
end;



procedure query(st,dr,x,nr,p:longint);
var m:longint;
begin
        if st=dr then
                begin
                        vp[st]:=nr;
                        update(1,n,1,st);
                end else
        begin
                m:=(st+dr) div 2;
                if x>a[p*2] then
                        query(m+1,dr,x-a[p*2],nr,p*2+1) else
                query(st,m,x,nr,2*p);
        end;
end;


procedure prel;
var i:longint;
begin
        init(1,n,1);
        for i:=n downto 1 do
                 begin
                        query(1,n,v[i],i,1);
                 end;
        for i:=1 to n do
                writeln(g,vp[i]);
        close(g);
end;



begin
        iofile;
        prel;
end.