Pagini recente » Cod sursa (job #2167788) | Cod sursa (job #2238576) | Cod sursa (job #3309800) | Cod sursa (job #3338724) | Cod sursa (job #3347943)
#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 cn = n;
int val = 0;
int lasti = 0;
int acutualPos;
cout << check(2);
cout << '\n';
unordered_set<int> poses;
for (int i = 1; i < n; i++)
{
pos += i;
if (pos > cn)
{
for (auto k : poses)
{
add(k, -1);
}
poses.clear();
cn = cn - (i - lasti);
lasti = i;
pos = (pos - 1) % cn + 1;
}
// cout << cn << " ";
fout << check(pos) << " ";
// fout << pos << " ";
poses.insert(pos);
}
fout << check(1) + 1;
return 0;
}