Cod sursa(job #1701455)

Utilizator sucureiSucureiRobert sucurei Data 13 mai 2016 09:34:13
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <iterator>
#include <queue>
#include <functional>
#include <utility>
#define MAX 1000005

using namespace std;

ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");

int L[MAX], R[MAX], c[MAX], Next[MAX], color[MAX];

int findNext(int i);

int main() {
    int n, i, left;

    fin >> n >> L[1] >> R[1] >> c[1];

    for (i = 2; i < n; ++i) {
        L[i] = ((long long)L[i - 1] * i) % n;
        R[i] = ((long long)R[i - 1] * i) % n;
        c[i] = ((long long)c[i - 1] * i) % n;

        if (L[i] > R[i])
            swap(L[i], R[i]);
    }

    for (i = n - 1; i > 0; --i) {
        left = findNext(L[i]);

        while (left <= R[i]) {
            color[left] = c[i];
            Next[left] = R[i] + 1;

            left = findNext(left + 1);
        }
    }

    for (i = 1; i < n; ++i)
        fout << color[i] << '\n';

    return 0;
}

int findNext(int i) {
    if (Next[i] == 0)
        return i;

    return Next[i] = findNext(Next[i]);
}