Pagini recente » Cod sursa (job #3218735) | Cod sursa (job #1099310) | Cod sursa (job #737727) | Cod sursa (job #2920361) | Cod sursa (job #3250515)
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int n;
int v[int(3e4) + 5];
int ans[int(3e4) + 5];
int aint[int(2 * 3e4) + 5];
void build(int curr_pos, int left, int right){
if (left == right){
aint[curr_pos] = 1;
return;
}
int mid = (left + right) / 2;
build(2 * curr_pos, left, mid);
build(2 * curr_pos + 1, mid + 1, right);
aint[curr_pos] = aint[2 * curr_pos] + aint[2 * curr_pos + 1];
}
void query_update(int curr_pos, int left, int right, int val, int concurent){
if (left == right){
aint[curr_pos] = 0;
ans[left] = concurent;
return;
}
int mid = (left + right) / 2;
if (aint[2 * curr_pos] < val){
query_update(2 * curr_pos + 1, mid + 1, right, val - aint[2 * curr_pos], concurent);
} else {
query_update(2 * curr_pos, left, mid, val, concurent);
}
aint[curr_pos] = aint[2 * curr_pos] + aint[2 * curr_pos + 1];
}
int main(){
fin >> n;
for (int i = 1; i <= n; i++){
fin >> v[i];
}
build(1, 1, n);
for (int i = n; i >= 1; i--){
query_update(1, 1, n, v[i], i);
}
for (int i = 1; i <= n; i++){
fout << ans[i] << '\n';
}
return 0;
}