Pagini recente » Cod sursa (job #344729) | Cod sursa (job #2867297) | Cod sursa (job #3240065) | Cod sursa (job #2473055) | Cod sursa (job #1850310)
#include <cstdio>
using namespace std;
#define ub(x)(x&(-x))
int n,i,a[30050],aib[30050],b[30050],poz;
void add(int x)
{
int i=0;
for(i=x;i<=n;i+=ub(i))
aib[i]--;
}
int sum(int x)
{
int s=0,i;
for(i=x;i>=1;i-=ub(i))
s+=aib[i];
return s;
}
int bs(int x)
{
int st=1,dr=n,mid=(st+dr)/2;
while(st<=dr)
{
mid=(st+dr)/2;
int sm=sum(mid);
if(sm<x)st=mid+1;
else dr=mid-1;
}
add(dr+1);
return dr+1;
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",&a[i]);
for(i=1;i<=n;i++) aib[i]=ub(i);
for(i=n;i>=1;i--)
b[bs(a[i])]=i;
for(i=1;i<=n;i++) printf ("%d\n",b[i]);
return 0;
}