Pagini recente » Cod sursa (job #2982915) | Cod sursa (job #2757478) | Cod sursa (job #971086) | Cod sursa (job #2302678) | Cod sursa (job #2427641)
#include <bits/stdc++.h>
using namespace std;
ifstream in("order.in");
ofstream out("order.out");
const int DIM = 3e4 + 7;
int aint[6 * DIM];
void build_tree(int pos, int l, int r)
{
if(l == r)
{
aint[pos] = 1;
return ;
}
int mid = (l + r) / 2;
build_tree(pos * 2, l, mid);
build_tree(pos * 2 + 1, mid + 1, r);
aint[pos] = r - l + 1;
}
void query(int pos, int l, int r, int cnt)
{
if(l == r)
{
out << l << ' ';
aint[pos] = 0;
return ;
}
int mid = (l + r) / 2;
if(aint[pos * 2] >= cnt)
query(pos * 2, l, mid, cnt);
else
query(pos * 2 + 1, mid + 1, r, cnt - aint[pos * 2]);
aint[pos] = aint[pos * 2] + aint[pos * 2 + 1];
}
int main()
{
int n;
in >> n;
build_tree(1, 1, n);
int pos = 2;
for(int i = 1; i <= n; i++)
{
query(1, 1, n, pos);
if(i != n)
{
pos = (pos + i) % aint[1];
if(pos == 0)
pos = aint[1];
}
}
}