Pagini recente » Cod sursa (job #3328367) | Cod sursa (job #83102) | Borderou de evaluare (job #2538114) | Cod sursa (job #3325614) | Cod sursa (job #3337801)
#include <bits/stdc++.h>
using namespace std;
#define USE_STD_IO 0
#if USE_STD_IO
#define fin cin
#define fout cout
#else
ifstream fin("schi.in");
ofstream fout("schi.out");
#endif
int n, i, c[30002], f[30002];
int aib[30002];
static inline void Update(int poz, int val) {
while(poz <= n) {
aib[poz] += val;
poz += (poz & -poz);
}
}
static inline int Query(int poz) {
int sum = 0;
while(poz >= 1) {
sum += aib[poz];
poz -= (poz & -poz);
}
return sum;
}
static inline int CautBin(int val) {
int st = 1, dr = n;
int mij, poz = dr;
while(st <= dr) {
mij = st + (dr - st) / 2;
if(Query(mij) >= val) {
poz = mij;
dr = mij - 1;
}
else st = mij + 1;
}
return poz;
}
int main() {
if(USE_STD_IO) ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
fin >> n;
for(i = 1; i <= n; i++) {
fin >> c[i];
Update(i, 1);
}
for(i = n; i >= 1; i--) {
int poz = CautBin(c[i]);
f[poz] = i;
Update(poz, -1);
}
for(i = 1; i <= n; i++) fout << f[i] << "\n";
return 0;
}