Pagini recente » Cod sursa (job #403012) | Cod sursa (job #2880012) | Cod sursa (job #1629033) | Cod sursa (job #1650886) | Cod sursa (job #1488089)
#include <bits/stdc++.h>
using namespace std;
const int nmax = 30005;
int arb[3*nmax], poz;
void build(int nod, int st, int dr)
{
if(st==dr)
{
arb[nod]=1;
return;
}
int m=(st+dr)>>1;
build(nod<<1, st, m);
build(nod<<1 | 1, m+1, dr);
arb[nod]=arb[nod<<1]+arb[nod<<1 | 1];
}
void query(int nod, int st, int dr, int val)
{
if(st==dr)
{
arb[nod]=0;
poz=st;
return;
}
int m=(st+dr)>>1;
if(val<=arb[nod<<1]) query(nod<<1, st, m, val);
else query(nod<<1 | 1, m+1, dr, val-arb[nod<<1]);
arb[nod]=arb[nod<<1]+arb[nod<<1 | 1];
}
int main()
{
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
int n, i, v[nmax], sol[nmax];
scanf("%d", &n);
for(i=1; i<=n; i++)
scanf("%d", &v[i]);
build(1, 1, n);
for(i=n; i; i--)
{
query(1, 1, n, v[i]);
sol[poz]=i;
}
for(i=1; i<=n; i++)
printf("%d\n", sol[i]);
fclose(stdin);
fclose(stdout);
return 0;
}