Pagini recente » Cod sursa (job #1578281) | Cod sursa (job #639339) | Cod sursa (job #1083712) | Cod sursa (job #656726) | Cod sursa (job #1835512)
#include <cstdio>
#define NMax 30000
int aib[NMax+1];
int pos[NMax+1];
int v[NMax+1];
int N;
void Update(int p, int x)
{
while(p <= N)
{
aib[p] += x;
p = p + ( p & (-p) );
}
}
int Query(int p)
{
int res=0;
while(p > 0)
{
res += aib[p];
p = p - ( p & (-p) );
}
return res;
}
int main(){
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
int i,st,dr,mid,f,x;
scanf("%d",&N);
for(i = 1; i <= N; ++i) scanf("%d",&v[i]);
for(i = 1; i <= N; ++i) Update(i,1);
for(i = N; i >= 1; --i)
{
x = v[i];
for(st = x, dr = N; st <= dr; )
{
mid = (st+dr)/2;
if( Query(mid) > x ) dr = mid-1;
else if( Query(mid) < x ) st = mid+1;
else{ f = mid; dr = mid-1; }
}
Update(f,-1);
pos[f] = i;
}
for(i = 1; i <= N; ++i) printf("%d\n",pos[i]);
return 0;
}