Pagini recente » Cod sursa (job #192623) | Cod sursa (job #1522137) | Cod sursa (job #2573197) | Cod sursa (job #1780220) | Cod sursa (job #3258917)
#include <stdio.h>
const int NMAX = 30000;
int aib[NMAX + 1], ans[NMAX], nums[NMAX], n;
void update(int i, int val) {
while (i <= n) {
aib[i] += val;
i += (i & -i);
}
}
int query(int i) {
int sum = 0;
while (i > 0) {
sum += aib[i];
i -= (i & -i);
}
return sum;
}
int main() {
FILE *fin, *fout;
int i, p, mid, lo, hi;
fin = fopen("schi.in", "r");
fscanf(fin, "%d", &n);
for (i = 1; i <= n; i++)
fscanf(fin, "%d", &nums[i]);
fclose(fin);
for (i = n; i > 0; i--) {
p = nums[i];
lo = 0;
hi = n + 1;
mid = 0;
while (hi - lo > 1) {
mid = (lo + hi) / 2;
if (mid - query(mid) < p)
lo = mid;
else
hi = mid;
}
ans[hi] = i;
update(hi, 1);
}
fout = fopen("schi.out", "w");
for (i = 1; i <= n; i++) {
fprintf(fout, "%d\n", ans[i]);
}
fclose(fout);
return 0;
}