Pagini recente » Cod sursa (job #2307369) | Cod sursa (job #1981834) | Cod sursa (job #540066) | Cod sursa (job #363340) | Cod sursa (job #2955890)
#include <bits/stdc++.h>
using namespace std;
int v[30005],aint[120005],ans[30005];
void update(int node, int st, int dr, int where)
{
if(st==dr)
{
aint[node]=true;
return;
}
int med=(st+dr)>>1;
if(where<=med) update(2*node,st,med,where);
else update(2*node+1,med+1,dr,where);
aint[node]=aint[2*node]+aint[2*node+1];
}
int query(int node, int st, int dr, int poz)
{
if(st==dr) return st;
int med=(st+dr)>>1;
if(poz<=(med-st+1)-aint[2*node]) return query(2*node,st,med,poz);
else return query(2*node+1,med+1,dr,poz-med-1+st+aint[2*node]);
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
int n;
scanf("%d",&n);
for(register int i=1;i<=n;i++)
scanf("%d",&v[i]);
for(register int i=n;i>=1;--i)
{
int poz=query(1,1,n,v[i]);
update(1,1,n,poz);
ans[poz]=i;
}
for(register int i=1;i<=n;i++)
printf("%d\n",ans[i]);
return 0;
}