Pagini recente » Cod sursa (job #1856607) | Cod sursa (job #2418541) | Cod sursa (job #186494) | Cod sursa (job #1119248) | Cod sursa (job #2565339)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
int n, want = 2, turn;
int v[4 * 30000 + 100];
void create(int nod, int st, int dr) {
v[nod] = dr - st + 1;
if (st == dr)
return;
int mij = (st + dr) / 2;
create(2 * nod, st, mij);
create(2 * nod + 1, mij + 1, dr);
}
int genNextIndex() {
turn++;
want = (want + turn - 1) % v[1];
if (!want)
want = v[1];
return want;
}
void update(int nod, int st, int dr, int want) {
if (st == dr) {
v[nod] = 0;
fout << st << ' ';
return;
}
int mij = (st + dr) / 2;
if (want <= v[2 * nod])
update(2 * nod, st, mij, want);
else
update(2 * nod + 1, mij + 1, dr, want - v[2 * nod]);
v[nod] = v[2 * nod] + v[2 * nod + 1];
}
int main() {
fin >> n;
create(1, 1, n);
while (v[1])
update(1, 1, n, genNextIndex());
return 0;
}