Pagini recente » Cod sursa (job #1929717) | Cod sursa (job #2317950) | Cod sursa (job #2767452) | Cod sursa (job #2935572) | Cod sursa (job #3238224)
#include <bits/stdc++.h>
using namespace std;
ifstream in("curcubeu.in");
ofstream out("curcubeu.out");
const int nmax=1e6;
int n, a[nmax+1], b[nmax+1], c[nmax+1], parent[nmax+1], r[nmax+1];
int FindRoot(int nod)
{
if(parent[nod]==nod)
return nod;
return parent[nod]=FindRoot(parent[nod]);
}
int main()
{
in>>n>>a[1]>>b[1]>>c[1];
if(a[1]>b[1])
switch(a[1], b[1]);
parent[1]=1;
for(int i=2; i<n; i++)
{
a[i]=(1ll*a[i-1]*i)%n;
b[i]=(1ll*b[i-1]*i)%n;
c[i]=(1ll*c[i-1]*i)%n;
if(a[i]>b[i])
switch(a[i], b[i]);
parent[i]=i;
}
parent[n]=n;
for(int i=n-1; i>=1; i--)
{
int p=FindRoot(a[i]);//unde coloreaza prima data, in dreapta punctului
while(p<=b[i])
{
r[p]=c[i];
parent[p]=b[i]+1;
p=FindRoot(p+1);
}
}
for(int i=1; i<=n-1; i++)
{
out<<r[i]<<'\n';
}
}