Pagini recente » Cod sursa (job #2239183) | Cod sursa (job #741281) | Cod sursa (job #2636237) | Cod sursa (job #1813299) | Cod sursa (job #2908692)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int lista[30005], lista_finala[30005];
int arb[120012];
void build (int nod, int s, int d)
{
if (s == d){
arb[nod] = 1;
//cout << s << '-'<< d <<' '<< arb[nod] << endl;
}
else{
int mij = (s + d) / 2;
build(2*nod, s, mij);
build(2*nod+1, mij+1, d);
arb[nod] = arb[2*nod] + arb[2*nod+1];
//cout << s << '-'<< d <<' '<< arb[nod] << endl;
}
}
int update (int nod, int s, int d, int val)
{
if (s == d){
arb[nod]--;
return s;
}
else{
int mij = (s + d) / 2;
if (val <= arb[nod*2]){
arb[nod]--;
return update(2*nod, s, mij, val);
}
else{
arb[nod]--;
return update(2*nod+1, mij+1, d, val - arb[2*nod]);
}
}
}
int main()
{
int n, i, poz;
fin >> n;
for (i = 1; i <= n; i++)
fin >> lista[i];
build(1, 1, n);
for (i = n; i >= 1; i--){
poz = update(1, 1, n, lista[i]);
lista_finala[poz] = i;
}
for(i = 1; i <= n; i++)
fout << lista_finala[i] <<'\n';
return 0;
}