Pagini recente » Cod sursa (job #155900) | Cod sursa (job #1859050) | Cod sursa (job #2109808) | Cod sursa (job #2097791) | Cod sursa (job #2785108)
#include <fstream>
#define NMAX 30000
#define MAXLOG 14
using namespace std;
ifstream cin ("schi.in");
ofstream cout ("schi.out");
int n;
int vaib[NMAX + 1], v[NMAX + 1], vsol[NMAX + 1];
static inline int lsb(int val) {
return val & (-val);
}
void update(int poz, int val) {
while (poz <= n) {
vaib[poz] += val;
poz += lsb(poz);
}
}
int query(int val) {
int i, sum, pozcur;
sum = pozcur = 0;
for (i = MAXLOG; i >= 0; i--) {
if (pozcur + (1 << i) <= n && sum + vaib[pozcur + (1 << i)] <= val && !(sum + vaib[pozcur + (1 << i)] == val && vsol[pozcur + (1 << i)] > 0)) {
sum += vaib[pozcur + (1 << i)];
pozcur += (1 << i);
}
if (sum == val && pozcur > 0)
return pozcur;
}
return -1;
}
int main() {
int i, poz, maxpoz;
cin >> n;
for (i = 1; i <= n; i++) {
cin >> v[i];
update(i, 1);
}
maxpoz = n;
for (i = n; i > 0; i--) {
poz = query(v[i]);
vsol[poz] = i;
update(poz, -1);
}
for (i = 1; i <= n; i++)
cout << vsol[i] << "\n";
return 0;
}