Pagini recente » Cod sursa (job #937772) | Cod sursa (job #145972) | Cod sursa (job #682303) | Cod sursa (job #2298904) | Cod sursa (job #3312889)
#include <bits/stdc++.h>
using namespace std;
int n, k, p;
int cit[30005];
int v[524300], afis[30005];
inline void update(int poz){
v[poz] = 0;
poz /= 2;
while(poz){
v[poz] = v[poz * 2] + v[poz * 2 + 1];
poz /= 2;
}
}
int query(int poz, int st, int dr, int nr1){
if(st == dr){
return poz;
}
int mij = (st + dr) / 2;
if(nr1 <= v[2 * poz]){
return query(poz * 2, st, mij, nr1);
}else{
return query(poz * 2 + 1, mij + 1, dr, nr1 - v[poz * 2]);
}
}
int main()
{
ifstream cin("schi.in");
ofstream cout("schi.out");
int a;
cin >> n;
k = log2(n) + 1;
p = (1<<k);
for(int i = p; i < n + p; i++){
v[i] = 1;
}
for(int i = p - 1; i > 0; i--){
v[i] = v[i * 2] + v[i * 2 + 1];
}
for(int i = 0; i < n; i++){
cin >> cit[i];
}
int x;
for(int i = n - 1; i >= 0; i--){
a = cit[i];
x = query(1, 1, p, a);
afis[x - p] = i;
update(x);
}
for(int i = 0; i < n; i++){
cout << afis[i] + 1 << "\n";
}
return 0;
}