Pagini recente » Cod sursa (job #566633) | Cod sursa (job #1043141) | Monitorul de evaluare | Cod sursa (job #3201129) | Cod sursa (job #2422544)
#include <fstream>
using namespace std;
ifstream cin ("order.in");
ofstream cout ("order.out");
int n;
int aint[120005];
void build(int nod, int l, int r) {
if(l > r || l > n || r > n)
return;
if(l == r) {
aint[nod] = 1;
return;
}
int mid = (l + r) >> 1;
build(2 * nod, l, mid);
build(2 * nod + 1, mid + 1, r);
aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}
void query(int nod, int l, int r, int value) {
if(l > r || l > n || r > n)
return;
if(l == r) {
cout << l << " ";
aint[nod] = 0;
return;
}
int mid = (l + r) >> 1;
if(aint[2 * nod] >= value)
query(2 * nod, l, mid, value);
else
query(2 * nod + 1, mid + 1, r, value - aint[2 * nod]);
aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}
int main() {
cin >> n;
build(1, 1, n);
int poz = 2, rem = n;
for(int i = 1; i <= n; i++) {
query(1, 1, n, poz);
rem--;
if(rem) {
poz = (poz + i) % rem;
if(!poz)
poz = rem;
}
}
return 0;
}