Pagini recente » Cod sursa (job #2054861) | Cod sursa (job #1521942) | Cod sursa (job #357180) | Cod sursa (job #430138) | Cod sursa (job #3245913)
#include <bits/stdc++.h>
//#define int short
using namespace std;
const int lim = 30001;
int lot[lim], aint[lim * 4];
void bulk (int nod, int st, int dr)
{
if (st == dr) {
aint[nod] = 1;
}
else {
int mid = (st + dr) / 2;
bulk (nod * 2 + 1, st, mid);
bulk (nod * 2 + 2, mid + 1, dr);
aint[nod] = aint[nod * 2 + 1] + aint[nod * 2 + 2];
}
}
void update (int nod, int st, int dr, int pos, int val)
{
if (st == dr) {
aint[nod] = 0;
lot[st] = val;
}
else {
int mid = (st + dr) / 2;
if (aint[nod * 2 + 1] >= pos) {
update(nod * 2 + 1, st, mid, pos, val);
}
else {
update(nod * 2 + 2, mid + 1, dr, pos - aint[nod * 2 + 1], val);
}
aint[nod] = aint[nod * 2 + 1] + aint[nod * 2 + 2];
}
}
int32_t main()
{
#ifndef LOCAL
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
#endif // LOCAL
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n; cin >> n;
bulk (1, 1, n);
vector<int> v(n + 1);
for (int i = 1; i <= n; i ++) {
cin >> v[i];
}
for (int i = n; i >= 1; i --) {
update(1, 1, n, v[i], i);
}
for (int i = 1; i <= n; i ++) {
cout << lot[i] << '\n';
}
}