Cod sursa(job #2595877)

Utilizator mariamirabella2Bucur-Sabau Maria-Mirabela mariamirabella2 Data 8 aprilie 2020 16:22:33
Problema Curcubeu Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <algorithm>
using namespace std;

const int Lim = 19000000;
int u =  Lim - 1;
char buf[Lim];

void Next () {
    if (++u == Lim)
        std::fread(buf, 1, Lim, stdin), u = 0;
}

void Get (int &x) {
    x = 0;
    for (; buf[u] < '0' || buf[u] > '9'; Next());
    for (x = 0; buf[u] >= '0' && buf[u] <= '9'; Next())
           x = x * 10 + buf[u] - '0';

}


int n,l,r,v[1000005],a[1000005],b[1000005],c[1000005],ans[1000005];

int main()
{
    freopen("curcubeu.in","r",stdin);
	freopen("curcubeu.out","w",stdout);
    Get(n),Get(a[1]),Get(b[1]),Get(c[1]);
    for(int i=2;i<n;i++){
        a[i]=(1LL*a[i-1]*i)%n;
        b[i]=(1LL*b[i-1]*i)%n;
        c[i]=(1LL*c[i-1]*i)%n;
    }
    for(int i=n-1;i>0;i--){
        l=min(a[i],b[i]);
        r=max(a[i],b[i]);
        for(int j=l;j<=r;j++){
            if(!ans[j]){
                ans[j]=c[i];
                v[j]=r;
            }
            else{
                j=v[j];
            }
        }
    }
    for(int i=1;i<n;i++){
        printf("%d \n",ans[i]);
    }
    return 0;
}