<script>
let MAXX = 100;
let st =
new
Array(4 * MAXX);
function
build(x, lx, rx)
{
if
(rx - lx == 1)
{
st[x] = 1;
return
;
}
let m = parseInt((lx + rx) / 2, 10);
build(x * 2 + 1, lx, m);
build(x * 2 + 2, m, rx);
st[x] = st[x * 2 + 1] + st[x * 2 + 2];
return
;
}
function
update(i, x, lx, rx)
{
if
(rx - lx == 1)
{
st[x] = 0;
return
;
}
let m = parseInt((lx + rx) / 2, 10);
if
(i < m)
update(i, x * 2 + 1, lx, m);
else
update(i, x * 2 + 2, m, rx);
st[x] = st[x * 2 + 1] + st[x * 2 + 2];
return
;
}
function
getans(x, lx, rx, k, n)
{
if
(rx - lx == 1)
{
if
(st[x] == k)
return
lx;
return
n;
}
let m = parseInt((lx + rx) / 2, 10);
if
(st[x * 2 + 1] >= k)
return
getans(x * 2 + 1, lx, m, k, n);
else
return
getans(x * 2 + 2, m, rx,
k - st[x * 2 + 1], n);
}
function
getPermutation(inv, n)
{
build(0, 0, n);
let ans = [];
for
(let i = n - 1; i >= 0; i--)
{
let temp = getans(0, 0, n,
st[0] - inv[i], n);
ans.push(temp + 1);
update(Math.max(0, temp), 0, 0, n);
}
for
(let i = n - 1; i >= 0; i--)
document.write(ans[i] +
" "
);
return
;
}
let inv = [ 0, 1, 1, 0, 3 ];
let N = inv.length;
getPermutation(inv, N);
</script>