Pagini recente » Cod sursa (job #1823761) | Cod sursa (job #1884528) | Cod sursa (job #1098831) | Cod sursa (job #3180966) | Cod sursa (job #64440)
Cod sursa(job #64440)
#include <stdio.h>
#define fin "schi.in"
#define fout "schi.out"
#define Nmax 30001
int N,sum[Nmax],ret[Nmax];
int v[Nmax];
inline void ins(int x,int val) {
for (; x<=N ; x += x & ~ (x-1) )
sum[x]+=val;
}
inline int query(int x) {
int s=0;
for ( ; x>0 ; x -= x & ~ (x-1) )
s+=sum[x];
return s;
}
inline int search(int lo,int hi,int val) {
int m;
if ( lo > hi )
return m;
m = ( lo + hi ) / 2;
if ( m - query(m) == val ) {
--m;
if ( m - query(m) == val )
return search(lo,m,val);
else
return m+1;
}
else
if ( m - query(m) < val )
return search(m+1,hi,val);
else
return search(lo,m-1,val);
}
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(1,N,v[i]);
ret[p]=i;
ins(p,1);
}
for ( i=1;i<=N;++i )
printf("%d\n",ret[i]);
return 0;
}