Pagini recente » Cod sursa (job #1714567) | Cod sursa (job #16742) | Cod sursa (job #3154963) | Cod sursa (job #2145371) | Cod sursa (job #2753195)
#include <fstream>
std::ifstream in("schi.in");
std::ofstream out("schi.out");
const int N = 3e4 + 1;
const int L = 15;
int aib[N], n, res[N], v[N];
void update(int p, int x) {
while (p <= n) {
aib[p] += x;
p += p & (-p);
}
}
int search(int x) {
int r = 0, step = 1 << L;
while (step) {
if (r + step <= n && aib[r + step] < x) {
r += step;
x -= aib[r];
}
step >>= 1;
}
return r + 1;
}
int main() {
in >> n;
for (int i = 1; i <= n; ++i) {
in >> v[i];
update(i, 1);
}
for (int i = n; i >= 1; --i) {
int x = v[i];
int pos = search(x);
update(pos, -1);
res[pos] = i;
}
for (int i = 1; i <= n; ++i) {
out << res[i] << '\n';
}
}