Pagini recente » Cod sursa (job #3121785) | Cod sursa (job #2476804) | Cod sursa (job #2400941) | Cod sursa (job #1557741) | Cod sursa (job #2087548)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout ("schi.out");
const int nmax=30002;
stack <int> S;
int n,v[nmax],a,b,arb[4*nmax],loc[nmax];
void query(int node, int left, int right){
if(left==right){
b=left;
return;
}
int mid=(left+right)/2;
if(mid-left+1-arb[2*node]>=a)query(2*node,left,mid);
else {
a-=mid-left+1-arb[2*node];
query(2*node+1,mid+1,right);
}
}
void update(int node, int left, int right){
if(left==right){
arb[node]=1;
return;
}
int mid=(left+right)/2;
if(b<=mid)update(2*node,left,mid);
else update(2*node+1,mid+1,right);
arb[node]=arb[2*node]+arb[2*node+1];
}
int main()
{
fin>>n;
for(int i=1;i<=n;++i)
fin>>v[i];
for(int i=n;i>=1;--i){
a=v[i];
query(1,1,n);
update(1,1,n);
loc[b]=i;
}
for(int i=1;i<=n;++i)fout<<loc[i]<<'\n';
return 0;
}