Pagini recente » Cod sursa (job #3204777) | Cod sursa (job #1210474) | Cod sursa (job #1611106) | Cod sursa (job #795030) | Cod sursa (job #3190100)
#include <fstream>
using namespace std;
int n,A[1000001],B[1000001],C[1000001];
int tata[1000001],sol[1000001];
int root(int nod){
while(tata[nod]>0)
nod = tata[nod];
return nod;
}
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");
#define int long long
void unite(int x,int y){
x = root(x);
y = root(y);
if(x!=y){
if(x>y)
swap(x,y);
tata[y]+=tata[x];
tata[x]=y;
}
}
int32_t main(){
fin>>n>>A[1]>>B[1]>>C[1];
tata[1]=-1;
for(int i=2;i<n;i++){
A[i]=(A[i-1]*i)%n;
B[i]=(B[i-1]*i)%n;
C[i]=(C[i-1]*i)%n;
if(A[i]>B[i])
swap(A[i],B[i]);
tata[i]=-1;
}
for(int i=n-1;i>=1;i--){
int st = A[i];
while(st<=B[i]){
if(sol[st]>0){ /// nu a fost facut nicio culoare
st = root(st)+1;
}
else{
if(sol[st-1]>0)
unite(st-1,st);
if(sol[st+1]>0)
unite(st,st+1);
sol[st]=C[i];
st++;
}
}
}
for(int i=1;i<n;i++)
fout<<sol[i]<<'\n';
return 0;
}