Pagini recente » Cod sursa (job #1613089) | Cod sursa (job #590176) | Cod sursa (job #2091236) | Cod sursa (job #2875643) | Cod sursa (job #2752357)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
int sum[120000];
int pos, val;
void update(int node, int left, int right)
{
if (left == right)
sum[node] = val;
else
{
int middle = (left + right) / 2;
if (pos <= middle)
update(node * 2, left, middle);
else
update(node * 2 + 1, middle + 1, right);
sum[node] = sum[node * 2] + sum[node * 2 + 1];
}
}
void Search(int node, int left, int right, int value)
{
if (left == right)
pos = left;
else
{
int middle = (left + right) / 2;
if (value <= sum[node * 2])
Search(node * 2, left, middle, value);
else
Search(node * 2 + 1, middle + 1, right, value - sum[node * 2]);
}
}
int main()
{
int n, value = 1;
fin>>n;
for (pos = 1; pos <= n; pos++)
{
val = 1;
update(1, 1, n);
}
for (int i = 1; i <= n; i++)
{
value = (value + i + sum[1]) % sum[1];
if (value == 0)
value = sum[1];
Search(1, 1, n, value);
fout<<pos<<" ";
val = 0;
value--;
update(1, 1, n);
}
return 0;
}