Cod sursa(job #1920527)

Utilizator duesakBourceanu Cristian duesak Data 10 martie 2017 05:44:55
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<cstdio>
#include<algorithm>
using namespace std;
//ifstream fin("curcubeu.in");
//ofstream fout("curcubeu.out");
int a[1000001],b[1000001],c[1000001];
int arb[1000002];
int v[1000002];
int parinte(int nd){
    if(!arb[nd])return nd;
    arb[nd]=parinte(arb[nd]);
    return arb[nd];
}
int unire(int a, int b, int c){
    if(a>b)swap(a,b);
    while(a<=b){
        if(v[a])
            a=parinte(a);
        if(a<=b){
            v[a]=c;
            arb[a]=b+1;
            ++a;
        }
    }
}
int main(){
    int n,i;
    freopen("curcubeu.in","r",stdin);
    freopen("curcubeu.out","w",stdout);
    scanf("%d %d %d %d",&n,&a[1],&b[1],&c[1]);
    //fin>>n>>a[1]>>b[1]>>c[1];
    for(i=2;i<n;i++){
        a[i]=(unsigned long long)a[i-1]*i%n;
        b[i]=(unsigned long long)b[i-1]*i%n;;
        c[i]=(unsigned long long)c[i-1]*i%n;;
    }
    for(i=n-1;i>=1;i--)
        unire(a[i],b[i],c[i]);
    for(i=1;i<n;i++)
        printf("%d\n",v[i]);
        //fout<<v[i]<<'\n';
    return 0;
}