Pagini recente » Cod sursa (job #1919790) | Cod sursa (job #1912012) | Cod sursa (job #1598922) | Cod sursa (job #1627788) | Cod sursa (job #643442)
Cod sursa(job #643442)
#include <cstdio>
#define file_in "schi.in"
#define file_out "schi.out"
#define lsb(x) ((x)&(-(x)))
#define nmax 35000
int N,Aib[nmax],V[nmax],P[nmax];
void add(int poz, int val){
int i;
for (i=poz;i<=N;i+=lsb(i))
Aib[i]+=val;
}
int sol(int poz){
int i,ans=0;
for (i=poz;i>=1;i-=lsb(i))
ans+=Aib[i];
return ans;
}
int cauta(int k){
int i,step;
for (step=1;step<=N;step<<=1);
for (i=N;step;step>>=1)
if (i-step>=1){
int X=sol(i-step);
if (k<=X)
i-=step;
}
return i;
}
int main(){
int i;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d", &N);
for (i=1;i<=N;++i){
scanf("%d", &V[i]);
add(i,1);
}
for (i=N;i>=1;--i){
int X=cauta(V[i]);
P[X]=i;
add(X,-1);
}
for (i=1;i<=N;++i)
printf("%d\n", P[i]);
return 0;
}