Pagini recente » Cod sursa (job #2977169) | Cod sursa (job #1504812) | Cod sursa (job #499225) | Cod sursa (job #277686) | Cod sursa (job #3156291)
#include <bits/stdc++.h>
using namespace std;
string nume="schi";
ifstream in(nume+".in");
ofstream out(nume+".out");
#define cin in
#define cout out
const int MN=3e5+5;
int arb[MN*4];
int n;
void update(int nod,int st, int dr,int poz, int x)
{
if(st==dr)
{
arb[nod]+=x;
return;
}
nod*=2;
int mid=(st+dr)/2;
if(poz<=mid)update(nod,st,mid,poz,x);
else update(nod+1, mid+1,dr,poz,x);
arb[nod>>1]=arb[nod]+arb[nod+1];
}
int query(int nod, int st, int dr,int val)
{
if(st==dr) return st;
int mid=(st+dr)/2;
nod*=2;
if(arb[nod]<val) return query(nod+1,mid+1,dr,val-arb[nod]);
return query(nod,st,mid,val);
}
int v[MN];
int ans[MN];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>v[i];
update(1,1,n,i,1);
}
for(int i=n;i>=1;i--)
{
int poz=query(1,1,n,v[i]);
update(1,1,n,poz, -1);
ans[poz]=i;
}
for(int i=1;i<=n;i++)
{
cout<<ans[i]<<'\n';
}
return 0;
}