Pagini recente » Cod sursa (job #1846985) | Cod sursa (job #3320014) | Cod sursa (job #3313811) | Cod sursa (job #256600) | Cod sursa (job #3347946)
#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, r = n, ans = -1;
while (l <= r)
{
int mid = (l + r) / 2;
if (query(mid) >= k)
{
ans = mid;
r = mid - 1;
}
else
{
l = mid + 1;
}
}
return ans;
}
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;
}