Pagini recente » Cod sursa (job #1876018) | Cod sursa (job #1729684) | Cod sursa (job #2215417) | Cod sursa (job #2126271) | Cod sursa (job #64447)
Cod sursa(job #64447)
#include <stdio.h>
#define fin "schi.in"
#define fout "schi.out"
#define Nmax 30001
int N,sum[Nmax],ret[Nmax];
int v[Nmax];
void ins(int x,int val) {
for (; x<=N ; x += x & ~ (x-1) )
sum[x]+=val;
}
int query(int x) {
int s=0;
for ( ; x>0 ; x -= x & ~ (x-1) )
s+=sum[x];
return s;
}
int search(int val) {
int m,tmp,lo,hi;
lo=1; hi=N;
while ( lo <= hi ) {
m = ( lo + hi ) / 2;
tmp=m-query(m);
if ( tmp == val ) {
--m;
if ( m - query(m) == val )
hi=m;
else
return m+1;
}
else
if ( tmp < val )
lo=m+1;
else
hi=m-1;
}
}
int main() {
int i,p;
freopen(fin,"r",stdin); freopen(fout,"w",stdout);
scanf("%d",&N);
for (i=1;i<=N;++i)
scanf("%d",&v[i]);
for (i=N;i>0;--i) {
p=search(v[i]);
ret[p]=i;
ins(p,1);
}
for ( i=1;i<=N;++i )
printf("%d\n",ret[i]);
return 0;
}