Pagini recente » Cod sursa (job #1094230) | Cod sursa (job #1780429) | Cod sursa (job #52420) | Rating Bogdan Ichim (Bogdiii) | Cod sursa (job #1347183)
#include <fstream>
using namespace std;
ifstream in("curcubeu.in");
ofstream out("curcubeu.out");
const int N = 1000000;
int n;
int a[N], b[N], c[N];
int t[N], d[N];
int ok[N], rez[N];
inline int minim(int x, int y)
{
return x < y ? x : y;
}
inline int maxim(int x, int y)
{
return x > y ? x : y;
}
int multime(int i)
{
if(t[i] == 0)
return i;
t[i] = multime(t[i]);
return t[i];
}
void reuneste(int i, int j)
{
i = multime(i);
j = multime(j);
if(i > j)
{
int aux = i;
i = j;
j = aux;
}
if(i != j)
{
t[j] = i;
d[i] += d[j];
}
}
void colorare(int x, int y, int cl)
{
for(int i = x; i <= y; i += d[i])
{
if(!ok[i])
{
rez[i] = cl;
ok[i] = 1;
if(i - 1 >= 1 && ok[i - 1])
reuneste(i - 1, i);
if(i + 1 <= n && ok[i + 1])
reuneste(i, i + 1);
}
i = multime(i);
}
}
void citire()
{
in >> n >> a[1] >> b[1] >> c[1];
for(int i = 2; i <= n - 1; i++)
{
a[i] = (long long)(a[i - 1] * i) % n;
b[i] = (long long)(b[i - 1] * i) % n;
c[i] = (long long)(c[i - 1] * i) % n;
}
n--;
for(int i = 1; i <= n; i++)
d[i] = 1;
}
int main()
{
citire();
for(int i = n; i >= 1; i--)
colorare(minim(a[i], b[i]), maxim(a[i], b[i]), c[i]);
for(int i = 1; i <= n; i++)
out << rez[i] << '\n';
return 0;
}