Pagini recente » Cod sursa (job #2243915) | Cod sursa (job #1673304) | Cod sursa (job #325221) | Cod sursa (job #2708961) | Cod sursa (job #990329)
Cod sursa(job #990329)
#include<stdio.h>
#define maxn 30005
using namespace std;
int n;
int a[maxn],aib[maxn],sol[maxn];
void update(int k,int val)
{
int i=0;
while(k<=n)
{
aib[k]+=val;
while( ((k>>i)&1)==0 ) i++;
k+=(1<<i++);
}
}
int query(int val)
{
int i,step,sum=0,sol;
for(step=1;step<n;step<<=1);
for(i=0;step;step>>=1)
if(i+step<=n)
{
if(aib[i+step]+sum==val) sol=i+step;
else
if(aib[i+step]+sum<val) i+=step,sum+=aib[i];
}
return sol;
}
void read()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]),update(i,1);
}
void solve()
{
int pos;
for(int i=n;i>=1;i--)
{
pos=query(a[i]);
sol[pos]=i;
update(pos,-1);
}
}
void print()
{
for(int i=1;i<=n;i++)
printf("%d\n",sol[i]);
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
read();
solve();
print();
fclose(stdin);
fclose(stdout);
return 0;
}