Pagini recente » Cod sursa (job #1966082) | Cod sursa (job #1857151) | Cod sursa (job #149817) | Cod sursa (job #1915484) | Cod sursa (job #3156330)
#include<iostream>
#include<stdio.h>
using namespace std;
const int NMAX = 3e4 + 5;
int n, arb[4 * NMAX], v[NMAX], ans[NMAX];
void build(int idx, int st, int dr)
{
if(st == dr)
{
arb[idx] = 1;
return;
}
int mij = (st + dr) / 2;
build(idx * 2, st, mij);
build(idx * 2 + 1, mij + 1, dr);
arb[idx] = arb[idx * 2] + arb[idx * 2 + 1];
}
void update(int idx, int st, int dr, int val, int pos)
{
if(st == dr)
{
ans[st] = pos;
arb[idx] = 0;
return;
}
int mij = (st + dr) / 2;
if(val <= arb[idx * 2])
update(idx * 2, st, mij, val, pos);
else
update(idx * 2 + 1, mij + 1, dr, val - arb[idx * 2], pos);
arb[idx] = arb[idx * 2] + arb[idx * 2 + 1];
}
int main()
{
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
cin >> n;
for(int i = 1; i <= n; i++)
cin >> v[i];
build(1, 1, n);
for(int i = n; i >= 1; i--)
update(1, 1, n, v[i], i);
for(int i = 1; i <= n; i++)
cout << ans[i] << "\n";
}