Cod sursa(job #1878578)

Utilizator bt.panteaPantea Beniamin bt.pantea Data 14 februarie 2017 11:51:35
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <cstdio>
#define NMAX 1000005
using namespace std;
ifstream f ("curcubeu.in");
//ofstream g ("curcubeu.out");
int a[NMAX], b[NMAX], c[NMAX], n, boss[NMAX], v[NMAX];

int Boss(int x)
{
    if (boss[x] == 0) return x;
    boss[x] = Boss(boss[x]);
    return boss[x];
}

void Union (int left, int right, int color)
{
    while (left <= right){
        if (v[left] != 0){
            left = Boss (left);
        }
        if (left <= right){
            v[left] = color;
            boss[left] = right + 1;
            left ++;
        }
    }
}

int main()
{
    f>>n>>a[1]>>b[1]>>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 >= 1; i--)
    {
        if (a[i] > b[i])
            swap(a[i], b[i]);
        Union(a[i], b[i], c[i]);
    }
    freopen("curcubeu.out", "w", stdout);
    for (int i = 1; i < n; i++)
        //g<<v[i]<<'\n';
        printf("%d\n", v[i]);
    return 0;
}