Pagini recente » Cod sursa (job #2069740) | Cod sursa (job #346074) | Cod sursa (job #1962271) | Autentificare | Cod sursa (job #253043)
Cod sursa(job #253043)
#include<stdio.h>
#define N 30010
int n,t[3*N];
int v[N];
int sol[N];
inline int left(int x)
{
return x<<1;
}
inline int right(int x)
{
return (x<<1)+1;
}
inline void citire()
{
scanf("%d",&n);
for(int i=1; i<=n; ++i)
scanf("%d",&v[i]);
}
void init(int p,int u,int poz)
{
if(p>u)
return;
if(p==u)
{
t[poz]=1;
return;
}
int m=(p+u)>>1;
init(p,m,left(poz));
init(m+1,u,right(poz));
t[poz]=t[left(poz)]+t[right(poz)];
}
int afla(int p,int u,int poz,int x)
{
--t[poz];
if(p==u)
return p;
if(t[left(poz)]>=x)
return afla(p,(p+u)>>1,left(poz),x);
else
return afla(((p+u)>>1)+1,u,right(poz),x-t[left(poz)]);
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
citire();
init(1,n,1);
for(int i=n; i; --i)
sol[afla(1,n,1,v[i])]=i;
for(int i=1; i<=n; ++i)
printf("%d\n",sol[i]);
return 0;
}