Pagini recente » Cod sursa (job #1254230) | Cod sursa (job #1126112) | Cod sursa (job #2166980) | Cod sursa (job #2662549) | Cod sursa (job #3229192)
#include <iostream>
using namespace std;
#define MAXN 300000
int n;
int arb[MAXN * 4];
int v[MAXN + 1], ans[MAXN + 1];
void update(int nod, int st, int dr, int poz, int x)
{
if (st == dr)
{
arb[nod] += x;
return;
}
int mid;
mid = (st + dr) / 2;
nod *= 2;
if (poz <= mid) update(nod, st, mid, poz, x);
else update(nod + 1, mid + 1, dr, poz, x);
arb[nod >> 1] = arb[nod] + arb[nod + 1];
}
int query(int nod, int st, int dr, int val)
{
if (st == dr)
return st;
int mij;
mij = (st + dr) / 2;
nod *= 2;
if (arb[nod] < val)
return query(nod + 1, mij + 1, dr, val - arb[nod]);
return query(nod, st, mij, val);
}
int main()
{
cin >> n;
int i;
for (i = 1; i <= n; i++)
{
cin >> v[i];
update(1, 1, n, i, 1);
}
int poz;
for (i = n; i >= 1; i--)
{
poz = query(1, 1, n, v[i]);
update(1, 1, n, poz, -1);
ans[poz] = i;
}
for (i = 1; i <= n; i++)
cout << ans[i] << '\n';
}