Pagini recente » Istoria paginii utilizator/monaluciastanica | Cod sursa (job #1722818) | Cod sursa (job #501843) | Cod sursa (job #1649449) | Cod sursa (job #1524269)
#include <cstdio>
const int MAX_N = 30000;
int fen[MAX_N + 1];
int n;
void fenAdd(int indx, int key) {
for (; indx <= n; indx += (indx & -indx)) {
fen[indx] += key;
}
}
int binSearch(int X, int stepSize) {
int pos = 0;
for (int step = stepSize; step; step >>= 1) {
if (pos + step <= n && fen[pos + step] < X) {
X -= fen[pos + step];
pos += step;
}
}
return pos + 1;
}
int main(void) {
freopen("order.in", "r", stdin);
freopen("order.out", "w", stdout);
scanf("%d", &n);
fclose(stdin);
for (int i = 1; i <= n; i++) {
fenAdd(i, 1);
}
int pos = 2, stepSize = n;
while (stepSize & (stepSize - 1)) {
stepSize -= (stepSize & -stepSize);
}
for (int i = 0; i < n; i++) {
pos += i;
pos -= pos / (n - i) * (n - i);
pos += ((n - i) & -(pos == 0));
int key = binSearch(pos, stepSize);
printf("%d ", key);
fenAdd(key, -1);
}
fclose(stdout);
return 0;
}