Pagini recente » Cod sursa (job #1475657) | Cod sursa (job #1526313) | Cod sursa (job #1489936) | Cod sursa (job #1946191) | Cod sursa (job #2833928)
#include <fstream>
using namespace std;
const string filename = "schi";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");
const int max_size = 3e4 + 5;
const int tree_size = 1e5 + 5;
int tree[tree_size], ans[max_size], a[max_size];
void precalculate(int node, int l, int r) {
if (l == r) {
tree[node] = 1;
return;
}
int mid = (l + r) / 2;
precalculate(2 * node, l, mid);
precalculate(2 * node + 1, mid + 1, r);
tree[node] = tree[node * 2] + tree[2 * node + 1];
}
void update(int node, int l, int r, int val, int index) {
if (l == r) {
tree[node] = 0;
ans[l] = index;
return;
}
int mid = (l + r) / 2;
if (val <= tree[node * 2]) {
update(2 * node, l, mid, val, index);
} else {
update(2 * node + 1, mid + 1, r, val - tree[2 * node], index);
}
tree[node]--;
}
int main() {
int n;
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> a[i];
}
precalculate(1, 1, n);
for (int i = n; i >= 1; i--) {
update(1, 1, n, a[i], i);
}
for (int i = 1; i <= n; i++) {
fout << ans[i] << '\n';
}
return 0;
}