Pagini recente » Cod sursa (job #2863086) | Cod sursa (job #2971627) | Cod sursa (job #1966218) | Cod sursa (job #1505781) | Cod sursa (job #825380)
Cod sursa(job #825380)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
#define MAXN 1 << 15
int N, arb[MAXN];
void update (int poz, int val) {
while (poz <= N) {
arb[poz] += val;
poz += poz & (-poz);
}
}
int search (int val) {
int lastrez = 0, rez, pas = 1 << 15;
for (rez = 0; pas; pas >>= 1) {
if (rez + pas <= N) {
if (val > arb[rez + pas]) {
rez += pas;
val -= arb[rez];
}
if(val == arb[rez + pas])
lastrez = rez + pas;
}
}
return lastrez;
}
int main () {
fin >> N;
for (int i = 1; i <= N; ++i)
update (i, 1);
int pas = 2;
for (int i = 0; i < N; ++i) {
pas = (pas + i - 1) % (N - i) + 1;
fout << search(pas) << " ";
update (search(pas), -1);
}
return 0;
}