Pagini recente » Cod sursa (job #1099044) | Cod sursa (job #2213110) | Cod sursa (job #1759238) | Istoria paginii runda/oni18_d1 | Cod sursa (job #2449840)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");
set <int> p;
int n, A, B, C, z, ans[1000001], id[1000001];
struct axa
{
int x, id;
}v[1000001];
bool cmp(axa a, axa b)
{
if (a.x == b.x)
return a.id > b.id;
return a.x < b.x;
}
int main()
{
fin >> n >> A >> B >> C;
if (A > B)
swap(A, B);
if (B > 0)
{
v[++z] = {A, 1};
v[++z] = {B, -1};
id[1] = C;
}
for (int i = 2; i < n; ++i)
{
A = (1LL * A * i) % n;
B = (1LL * B * i) % n;
C = (1LL * C * i) % n;
if (A > B)
swap(A, B);
if (B > 0)
{
v[++z] = {A, i};
v[++z] = {B, -i};
id[i] = C;
}
}
sort(v + 1, v + z + 1, cmp);
for (int i = 1; i < z; ++i)
{
if (v[i].id > 0)
{
p.insert(v[i].id);
}
else
{
p.erase(-v[i].id);
}
if (p.size() > 0)
for (int j = v[i].x; j <= v[i + 1].x; ++j)
ans[j] = max(ans[j], *p.rbegin());
}
for (int i = 1; i < n; ++i)
fout << id[ans[i]] << "\n";
}