Pagini recente » Cod sursa (job #2520081) | Cod sursa (job #2749408) | Cod sursa (job #550537) | Cod sursa (job #556012) | Cod sursa (job #3229194)
#include <iostream>
#include <fstream>
using namespace std;
int aint[4000000],rez[100005],v[100005];
void update(int nod, int from, int to, int poz, int val)
{
int mij=(from+to)/2;
if(to==from)
{
aint[nod]=val;
return ;
}
nod*=2;
if(poz<=mij) update(nod, from, mij, poz, val);
else update(nod+1, mij+1, to, poz, val);
aint[nod/2]=aint[nod] + aint[nod+1];
}
int query(int nod, int from, int to, int val)
{
int mij=(from+to)/2;
if(from==to) return from;
nod*=2;
if(aint[nod]<val) return query(nod+1, mij+1, to, val-aint[nod]);
return query(nod, from, to, val);
}
int main()
{
ifstream cin("schi.in");
ofstream cout("schi.out");
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,q,l;
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);
rez[poz]=i;
}
for(int i=1;i<=n;i++)
cout<<rez[i]<<'\n';
return 0;
}