Pagini recente » Cod sursa (job #2800658) | Cod sursa (job #2712917) | Cod sursa (job #1699708) | Cod sursa (job #511869) | Cod sursa (job #3132690)
#include <iostream>
#include <fstream>
using namespace std;
const int MAXN = 200005;
int n, m, i, j, aib[MAXN], v[MAXN], ans[MAXN];
void update(int pos, int val) {
while (pos <= n) {
aib[pos] += val;
pos += pos & (-pos);
}
}
int query(int pos) {
int result = 0;
while (pos > 0) {
result += aib[pos];
pos -= pos & (-pos);
}
return result;
}
int binarySearch(int elem) {
int left = 1, right = n;
while (left <= right) {
int mid = (left + right) / 2;
if (query(mid) < elem)
left = mid + 1;
else
right = mid - 1;
}
return left;
}
int main() {
ifstream fin("schi.in");
ofstream fout("schi.out");
fin >> n;
for (i = 1; i <= n; i++) {
fin >> v[i];
update(i, 1);
}
for (i = n; i >= 1; i--) {
int l = binarySearch(v[i]);
ans[l] = i;
update(l, -1);
}
for (i = 1; i <= n; i++)
fout << ans[i] << '\n';
fin.close();
fout.close();
return 0;
}