Cod sursa(job #737553)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 19 aprilie 2012 17:36:11
Problema Schi Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.35 kb
Program schi;
 var aux,c,rez,k:array [1..30000] of longint;
      i,pos,n:longint;
      fi,fo:text;
procedure gen;
 var nr,i,x:longint;
begin
 for i:=1 to n do begin
                       nr:=0; x:=i;
                        while x and 1=0 do begin inc(nr); x:=x shr 1; end;
                       k[i]:=nr;
                       end;
end;
procedure change(a,b:longint);
begin
 while a<=n do begin aux[a]:=aux[a]+b; a:=a+(1 shl k[a]); end;
end;
function sum(x:longint):longint;
 var s:longint;
begin
  s:=0;
 while x>0 do begin s:=s+aux[x]; x:=x-(1 shl k[x]); end;
  sum:=s;
end;
procedure cauta(x:longint);
 var l,r,mid,p:longint;
begin
 l:=1; r:=n; pos:=n;
  while l<=r do begin
               mid:=(l+r) div 2; p:=sum(mid);
                if p<x then l:=mid+1
                 else begin
                        r:=mid-1;
                         if (mid<pos) and (p=x) then pos:=mid;
                        end;
                end;
end;
begin
 assign(fi,'schi.in');
  assign(fo,'schi.out');
 reset(fi); rewrite(fo);
  readln(fi,n); gen; for i:=1 to n do begin readln(fi,c[i]); change(i,1); end;
 for i:=n downto 1 do begin
                       cauta(c[i]);
                        rez[pos]:=i;
                       change(pos,-1);
                       end;
  for i:=1 to n do writeln(fo,rez[i]);
 close(fo);
end.