Pagini recente » Cod sursa (job #3362969) | Cod sursa (job #3363041) | Cod sursa (job #3362987) | Cod sursa (job #3362508) | Cod sursa (job #3362999)
#include <iostream>
using namespace std;
int arr[30001];
int ans[30001];
int aint[60003];
void build(int node,int st,int dr)
{
if(st==dr)
{
aint[node]=1;
return;
}
else
{
int mid=(st+dr)/2;
build(node*2,st,mid);
build(node*2+1,mid+1,dr);
aint[node]=aint[node*2]+aint[node*2+1];
}
}
void update(int pos,int node,int st,int dr)
{
if(st==dr)
{
aint[node]=0;
return;
}
int mid=(st+dr)/2;
if(pos<=mid)
{
update(pos,2*node,st,mid);
}
else
{
update(pos,2*node+1,mid+1,dr);
}
aint[node]=aint[node*2]+aint[node*2+1];
}
int cautbin(int node,int st,int dr,int val)
{
if(st==dr)
{
return st;
}
else
{
int mid=(st+dr)/2;
if(val>aint[2*node])
{
val-=aint[2*node];
return cautbin(2*node+1,mid+1,dr,val);
}
else
{
return cautbin(2*node,st,mid,val);
}
}
}
int main()
{
int n,q;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>arr[i];
}
build(1,1,n);
for(int i=n; i>=1; i--)
{
int poz=cautbin(1,1,n,arr[i]);
ans[poz]=i;
update(poz,1,1,n);
}
for(int i=1; i<=n; i++)
{
cout<<ans[i]<<"\n";
}
return 0;
}