Pagini recente » Cod sursa (job #1526311) | Cod sursa (job #1857684) | Cod sursa (job #1807805) | Cod sursa (job #1648202) | Cod sursa (job #2736041)
#include <fstream>
using namespace std;
const int NMAX = 1000000;
int culoare[1 + NMAX];
int dr[1 + NMAX];
int a[NMAX];
int b[NMAX];
int c[NMAX];
int top;
int stiva[1 + NMAX];
int getDr(int idx)
{
top = 0;
while (dr[idx] != idx)
{
top++;
stiva[top] = idx;
idx = dr[idx];
}
for (int i = 1; i <= top; i++)
{
dr[stiva[i]] = idx;
}
return idx;
}
int main()
{
ifstream in("curcubeu.in");
ofstream out("curcubeu.out");
int n;
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;
if (a[i] > b[i])
swap(a[i], b[i]);
}
for (int i = 1; i <= n; i++)
{
dr[i] = i;
}
for (int i = n - 1; i >= 1; i--)
{
for (int j = getDr(a[i]); j <= b[i]; j = getDr(j))
{
culoare[j] = c[i];
dr[j] = getDr(b[i] + 1);
j++;
}
}
for (int i = 1; i <= n - 1; i++)
{
out << culoare[i] << '\n';
}
out << '\n';
return 0;
}