Pagini recente » Borderou de evaluare (job #2006064) | Cod sursa (job #2608587) | Cod sursa (job #1086515) | Cod sursa (job #802454) | Cod sursa (job #558661)
Cod sursa(job #558661)
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.