Pagini recente » Borderou de evaluare (job #26259) | Cod sursa (job #26257) | Monitorul de evaluare | Borderou de evaluare (job #2799319) | Cod sursa (job #2149536)
#include <cstdio>
#include <cmath>
#define MAXN 30001
int aib[MAXN],v[MAXN],sol[MAXN],n;
inline void update(int p)
{
while(p<=n)
{
aib[p]--;
p+=p&(-p);
}
}
inline int cbin(int s)
{
int i=0,pas=log2(n);
for(pas=1<<pas;pas && s;pas>>=1)
if(i+pas<=n && aib[i+pas]<s)
i+=pas,s-=aib[i];
return i+1;
}
int main()
{
FILE *fin,*fout;
fin=fopen("schi.in","r");
fout=fopen("schi.out","w");
int x;
fscanf(fin,"%d",&n);
for(int i=1;i<=n;i++)
fscanf(fin,"%d",&v[i]);
for(int i=1;i<=n;i++)
aib[i]=i&(-i);
for(int i=n;i;i--)
{
x=cbin(v[i]);
sol[x]=i;update(x);
}
for(int i=1;i<=n;i++)
fprintf(fout,"%d\n",sol[i]);
fclose(fin);
fclose(fout);
return 0;
}