Pagini recente » Cod sursa (job #87775) | Cod sursa (job #2131915) | Cod sursa (job #1670736) | Cod sursa (job #2911067) | Cod sursa (job #3183354)
#include <bits/stdc++.h>
using namespace std;
int n,aint[120001],ans[30001];
int fs(int nod){
return 2*nod;
}
int fd(int nod){
return 2*nod + 1;
}
void buildarb(int nod, int st, int dr){
if(st == dr)
{
aint[nod] = 1;
return ;
}
int mij = (st + dr) /2;
buildarb(fs(nod), st, mij);
buildarb(fd(nod), mij + 1, dr);
aint[nod] = aint[fs(nod)] + aint[fd(nod)];
}
vector <int> q;
void cit(){
cin >> n ;
for(int i = 1; i <= n; i++)
{
int schi;
cin >> schi;
q.push_back(schi);
}
reverse(q.begin(),q.end());
}
int superquery(int nod, int st,int dr, int x)
{
if(st == dr) {
aint[nod] = 0;
return st;
}
int mij = (st + dr)/2;
int aux;
if( x <= aint[fs(nod)])
{
aux = superquery(fs(nod), st, mij, x);
}
else aux = superquery(fd(nod),mij + 1, dr, x - aint[fs(nod)]);
aint[nod] = aint[fs(nod)] + aint[fd(nod)];
return aux;
}
void rez(){
buildarb(1,1,n);
for(int i = 0; i < q.size(); i++)
{
int aux1 = superquery(1,1,n,q[i]);
ans[aux1] = n - i;
}
for(int i = 1; i <= n; i++) cout << ans[i] <<"\n";
}
int main(){
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
cit();
rez();
return 0;
}