Pagini recente » Cod sursa (job #2595344) | Cod sursa (job #2294724) | Cod sursa (job #1632990) | Cod sursa (job #1552537) | Cod sursa (job #2916626)
#include <bits/stdc++.h>
#define RI_MAX (1 << 15)
#define L (RI_MAX + 3)
#define lsb(x) (x & (-x))
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int v[L], bin[L], aib[L], n, ans[L];
inline void update(int pos, int val){
for (; pos <= n; pos += lsb(pos))
aib[pos] += val;
}
inline int cb(int sum){
int r = 0, step = RI_MAX, s = 0;
while (step){
if (r + step <= n && s + aib[r + step] <= sum){
s += aib[r + step];
r += step;
}
step /= 2;
}
return r;
}
int main(){
int i, pos;
fin >> n;
for (i = 1; i <= n; i++){
fin >> v[i];
bin[i] = 1;
update(i, 1);
}
for (i = n; i > 0; i--){
pos = cb(v[i] - 1) + 1;
ans[pos] = i;
bin[pos] = 0;
update(pos, -1);
}
for (i = 1; i <= n; i++)
fout << ans[i] << "\n";
return 0;
}