Pagini recente » Cod sursa (job #991754) | Cod sursa (job #897512) | Cod sursa (job #2457402) | Cod sursa (job #691360) | Cod sursa (job #2020086)
#include <bits/stdc++.h>
using namespace std;
// #define f cin
// #define g cout
ifstream f("schi.in");
ofstream g("schi.out");
int N;
vector < int > aib, a, sol;
int lsb(int x) {
return x & (-x);
}
void update(int pos, int val) {
for (; pos <= N; pos += lsb(pos)) {
aib[pos] += val;
}
}
int query(int pos) {
int res = 0;
for (; pos; pos -= lsb(pos)) {
res += aib[pos];
}
return res;
}
int main() {
f >> N;
a.resize(N + 1);
sol.resize(N + 1);
aib.resize(N + 1);
for (int i = 1; i <= N; ++i) {
f >> a[i];
update(i, 1);
}
for (int i = N; i > 0; --i) {
int pos = 0;
for (int step = (1 << 25); step; step >>= 1) {
if (pos + step <= N && query(pos + step) <= a[i]) {
pos += step;
}
}
//cout << a[i] << ' ' << pos << ' ' << query(aib, pos) << '\n';
sol[pos] = i;
update(pos, -1);
}
for (int i = 1; i <= N; ++i) {
cout << sol[i] << '\n';
}
return 0;
}