Cod sursa(job #1395051)

Utilizator campionulFlavius Stoican campionul Data 20 martie 2015 23:11:03
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <cstdio>
#define nmax 1000007
using namespace std;
int n,a,b,c;
struct Coord{
 int x,y,c;
};
Coord d[nmax];
int urm[nmax],cul[nmax];
int main(){
    int i,j,st,dr,g;
    freopen("curcubeu.in","r",stdin);
    freopen("curcubeu.out","w",stdout);
    scanf("%d%d%d%d",&n,&a,&b,&c);
    d[1].x=min(a,b);d[1].y=max(a,b);d[1].c=c;
    for(i=2;i<n;i++){
        a=(a*i)%n;
        b=(b*i)%n;
        c=(c*i)%n;
        d[i].x=min(a,b);d[i].y=max(a,b);d[i].c=c;
    }
//    for(i=1;i<n;i++)
//        cout<<d[i].x<<' '<<d[i].y<<' '<<d[i].c<<'\n';
//    cout<<'\n';
    for(i=n-1;i>0;i--){
        st=d[i].x;
        dr=d[i].y;
        g=d[i].c;
        for(j=st;j<=dr;j+=urm[j]+1) if(!cul[j])cul[j]=g;
        urm[st]=max(urm[st],(st+dr)/2);
    }
    for(i=1;i<n;i++)
        cout<<cul[i]<<'\n';
    return 0;
}