Pagini recente » Borderou de evaluare (job #2015883) | Borderou de evaluare (job #2704247) | Cod sursa (job #2652393) | Cod sursa (job #1705516) | Cod sursa (job #36093)
Cod sursa(job #36093)
# include <stdio.h>
# define _fin "schi.in"
# define _fout "schi.out"
# define maxn 30003
int arb[maxn], n, a[maxn], ord[maxn];
void update(int i, int add)
{
int ii;
for (ii=i; ii<=n; ii += ii & (-ii))
arb[ii]+=add;
}
int query(int i)
{
int ii, ret=0;
for (ii=i; ii>0; ii &= ii-1) ret += arb[ ii ];
return ret;
}
int bsearch(int x)
{
int i, step;
for (step=1; step<=n; step<<=1); step>>=1;
for (i=n; step; step>>=1)
if ( i-step>=1 )
if ( query(i-step) >= x ) i-=step;
return i;
}
int main()
{
freopen(_fin, "r", stdin);
freopen(_fout,"w", stdout);
int i, x;
for (scanf("%d", &n), i=1; i<=n; i++) scanf("%d", a+i), update(i, 1);
for (i=n; i>=1; i--) {
x = bsearch(a[i]);
ord[x]=i;
update(x, -1);
}
for (i=1; i<=n; i++) printf("%d\n", ord[i]);
return 0;
}