Pagini recente » Cod sursa (job #756517) | Cod sursa (job #1306748) | Cod sursa (job #1183293) | Cod sursa (job #2195511) | Cod sursa (job #1052435)
#include<cstdio>
using namespace std;
int t[1<<18],v[1<<18],start,poz,n,i,x,read[30001];
void update(int p,int st,int dr)
{
int m;
if(st==dr)
{
return;
}
m=(st+dr)/2;
if(poz<=m)
update(2*p,st,m);
else
update(2*p+1,m+1,dr);
t[p]=t[2*p]+t[2*p+1];
}
void query(int p,int st,int dr)
{
if(st==dr)
{
v[st]=i;
t[p]=1;
return;
}
int m=(st+dr)>>1;
int g=m-st+1;
if(poz<=g-t[2*p])
query(2*p,st,m);
else
{
poz-=g-t[2*p];
query(2*p+1,m+1,dr);
}
t[p]++;
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&read[i]);
}
poz=0;
for(i=n;i>=1;i--)
{
start=i;
poz=read[i];
query(1,1,n);
update(1,1,n);
}
for(i=1;i<=n;i++)
printf("%d\n",v[i]);
return 0;
}