Cod sursa(job #1463810)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 21 iulie 2015 16:02:52
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<cstdio>
using namespace std;
long long a[1000001],b[1000001],c[1000001];
int next[1000001],sol[1000001];
int find_next(int elem){
    if(next[elem]==elem)
        return elem;
    int x;
    x=find_next(next[elem]);
    next[elem]=x;
    return x;
}
int main(){
    freopen("curcubeu.in","r",stdin);
    freopen("curcubeu.out","w",stdout);
    int n,x,i,j,mini,maxi;
    scanf("%d%d%d%d",&n,&a[1],&b[1],&c[1]);
    for(i=2;i<=n-1;i++){
        a[i]=(a[i-1]*i)%n;
        b[i]=(b[i-1]*i)%n;
        c[i]=(c[i-1]*i)%n;
    }
    for(i=1;i<=n;i++)
        next[i]=i;
    for(i=n-1;i>=1;i--){
        if(a[i]>b[i]){
            mini=b[i];
            maxi=a[i];
        }
        else{
            mini=a[i];
            maxi=b[i];
        }
        x=mini;
        while(x<=maxi){
            x=find_next(x);
            if(x<=maxi){
                sol[x]=c[i];
                next[x]=next[maxi+1];
            }
            x++;
        }
        next[mini]=next[maxi+1];
    }
    for(i=1;i<=n-1;i++)
        printf("%d\n",sol[i]);
    return 0;
}