Pagini recente » Cod sursa (job #2203799) | Cod sursa (job #3161272) | Cod sursa (job #2286292) | Rating Ilie Teodor Danila (ilie.danila) | Cod sursa (job #3190101)
#include <fstream>
using namespace std;
long long n;
long long A[1000001],B[1000001],C[1000001];
long long tata[1000001],sol[1000001];
long long root(long long nod){
while(tata[nod]>0)
nod = tata[nod];
return nod;
}
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");
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;
}
}
int 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--){
long long 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;
}