Pagini recente » Cod sursa (job #3193762) | Cod sursa (job #2902273)
#include <fstream>
#define NMAX 30004
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
int N, aint[4 * NMAX], copil = 2, k;
void create(int n, int left, int right)
{
aint[n] = right - left + 1;
if(left == right)
return;
create(2 * n, left, (left + right) / 2);
create(2 * n, (left + right) / 2 + 1, right);
}
void update(int n, int left, int right, int copil) {
if(left == right)
{
aint[n] = 0;
fout<<left<<" ";
return;
}
if(copil <= aint[2 * n])
update(2 * n, left, (left + right) / 2, copil);
else
update(2 * n + 1, (left + right) / 2 + 1, right, copil - aint[2 * n]);
aint[n] = aint[2 * n] + aint[2 * n + 1];
}
int nextIndex()
{
k ++;
copil = (copil + k - 1) % aint[1];
if(!copil)
copil = aint[1];
return copil;
}
int main()
{
fin>>N;
create(1, 1, N);
while(aint[1])
update(1, 1, N, nextIndex());
return 0;
}