Pagini recente » Cod sursa (job #3323034) | Cod sursa (job #3330566) | Cod sursa (job #3306724) | Cod sursa (job #3333999) | Cod sursa (job #3347948)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
int aib[300005], 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)
r = mid - 1;
else
l = mid + 1;
}
return l;
}
int main()
{
fin >> n;
int pos = 1;
for (int i = 1; i <= n; i++)
{
add(i, 1);
}
for (int i = 1; i <= n; i++)
{
int ans = check(pos + 1);
fout << ans << " ";
add(ans, -1);
if (i != n)
pos = (pos + i) % (n - i);
}
return 0;
}