Pagini recente » Cod sursa (job #1575321) | Cod sursa (job #150176) | Istoria paginii utilizator/dinuionica2001 | Cod sursa (job #2683732) | Cod sursa (job #737553)
Cod sursa(job #737553)
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.