Pagini recente » Cod sursa (job #3331513) | Cod sursa (job #3305419) | Cod sursa (job #3321838) | Cod sursa (job #3341704) | Cod sursa (job #3347945)
#include <fstream>
#include <iostream>
#include <unordered_set>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
int aib[300005];
int n;
void add(int pos, int x)
{
for (int i = pos; i <= n; i += (i & -i))
{
aib[i] += x;
}
}
int query(int pos)
{
int cnt = 0;
for (int i = pos; i >= 1; i -= (i & (-i)))
{
cnt += aib[i];
}
return cnt;
}
int check(int k)
{
int l = 1;
int r = n;
while (l <= r)
{
int mid = (l + r) / 2;
if (query(mid) == k)
{
return mid;
}
else if (query(mid) < k)
{
l = mid + 1;
}
else
{
r = mid - 1;
}
}
return -1;
}
int main()
{
fin >> n;
int pos = 1;
for (int i = 1; i <= n; i++)
{
add(i, 1);
}
int remaining = n;
for (int i = 1; i <= n; i++)
{
int ans = check(pos + 1);
fout << ans;
add(ans, -1);
remaining--;
if (i != n)
{
fout << " ";
pos = (pos + i) % remaining;
}
}
return 0;
}