Pagini recente » Cod sursa (job #3184075) | Cod sursa (job #2185125) | Cod sursa (job #1022350) | Cod sursa (job #1161225) | Cod sursa (job #3276131)
#pragma GCC optimize("O3")
#pragma GCC optimize("fast-math")
#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define ll long long
#define mod 100003
using namespace std;
const int dim = 1e6 + 55;
struct event
{
int st, dr, color;
};
event stiva[dim];
int a1, b1, c1, n;
int tata[dim], sol[dim];
bool intersec(int a1, int b1, int c1, int d1)
{
int mini = min(b1, d1);
int maxi = max(a1, c1);
return (maxi <= mini);
}
int findu(int x)
{
if(x == tata[x])
return x;
return tata[x] = findu(tata[x]);
}
void unionu(int x, int y)
{
int a = findu(x);
int b = findu(y);
if(a != b)
{
tata[b] = a;
}
}
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");
int32_t main(int argc, char * argv[])
{
fin >> n >> a1 >> b1 >> c1;
stiva[1] = {min(a1, b1), max(a1, b1), c1};
tata[1] = 1;
tata[n] = n;
for(int i = 2; i < n; ++i)
{
a1 = (a1 * i) % n;
b1 = (b1 * i) % n;
c1 = (c1 * i) % n;
stiva[i] = {min(a1, b1), max(a1, b1), c1};
tata[i] = i;
}
for(int i = n - 1; i >= 1; --i)
{
int poz = findu(stiva[i].st);
while(poz <= stiva[i].dr)
{
sol[poz] = stiva[i].color;
tata[poz] = stiva[i].dr + 1;
poz = findu(poz + 1);
}
}
for(int i = 1; i < n; ++i)
fout << sol[i] << '\n';
return 0;
}