Pagini recente » Cod sursa (job #546507) | Cod sursa (job #1407338) | Cod sursa (job #2506164) | Cod sursa (job #1782403) | Cod sursa (job #3218710)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int n, i, x[30002], aib[30002], r[30002];
static inline int Ub(int a) {
return (a & -a);
}
static inline void Add(int a, int val) {
for(int i = a; i <= n; i += Ub(i)) aib[i] += val;
}
static inline int Sum(int a) {
int s = 0;
for(int i = a; i >= 1; i -= Ub(i)) s += aib[i];
return s;
}
static inline int Cb(int val) {
int st = 1, dr = n;
int poz = n;
while(st <= dr) {
int mij = st + (dr - st) / 2;
int s = Sum(mij);
if(s >= val) {
poz = mij;
dr = mij - 1;
}
else st = mij + 1;
}
return poz;
}
int main() {
fin >> n;
for(i = 1; i <= n; i++) {
fin >> x[i];
Add(i, 1);
}
for(i = n; i >= 1; i--) {
int nm = Cb(x[i]);
Add(nm, -1);
r[nm] = i;
}
for(i = 1; i <= n; i++) fout << r[i] << "\n";
return 0;
}