Pagini recente » Cod sursa (job #2750607) | Cod sursa (job #2209101) | Cod sursa (job #583723) | Cod sursa (job #3225062) | Cod sursa (job #2755805)
#include <iostream>
#include <fstream>
using namespace std;
const int maxn = 30005;
ifstream f("schi.in");
ofstream g("schi.out");
int n;
int aib[maxn];
int v[maxn], ans[maxn];
void update(int pos, int val) {
while(pos <= n) {
aib[pos] += val;
pos += (pos & (-pos));
}
}
int getpos(int val) {
int r = 0, p = 1 << 30;
while(p > 0) {
if(r + p <= n && aib[r + p] < val) {
val -= aib[r + p];
r += p;
}
p >>= 1;
}
return r + 1;
}
int main()
{
int i;
f >> n;
for(i = 1; i <= n; i ++) {
f >> v[i];
update(i, 1);
}
for(i = n; i >= 1; i --) {
int now = getpos(v[i]);
ans[now] = i;
update(now, -1);
}
for(i = 1; i <= n; i ++) {
g << ans[i] << ' ';
}
g << '\n';
return 0;
}