Cod sursa(job #3191806)

Utilizator YosifIosif Andrei Stefan Yosif Data 10 ianuarie 2024 17:58:24
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>
using namespace std;

string file = "curcubeu";
ifstream fin(file + ".in");
ofstream fout(file + ".out");

int *t;
int n, A, B, C;

void update(int x, int y, int val, int i = 1, int l = 1, int r = n) {

    if (y < l || r < x)
        return;

    int m = (l + r) >> 1;
    int aux = (i << 1);

    if (t[i]) {

        if (l != r) {

            t[aux] = t[aux + 1] = t[i];
            t[i] = 0;
        }
    }

    if (x <= l && r <= y) {

        t[i] = val;
        return;
    }

    update(x, y, val, aux, l, m);
    update(x, y, val, aux + 1, m + 1, r);
}

void display(int i = 1, int l = 1, int r = n) {

    if (l == r) {

        fout << t[i] << '\n';
        return;
    }

    int m = (l + r) >> 1;
    int aux = (i << 1);

    if (t[i]) {

        t[aux] = t[aux + 1] = t[i];
        t[i] = 0;
    }

    display(aux, l, m);
    display(aux + 1, m + 1, r);
}

int main(){

    t = new int[3000001]();
    fin >> n >> A >> B >> C;
    n--;

    for (int i = 1; i <= n; i++) {

        update(A, B, C);

        int A2, B2, C2;

        A2 = (1LL * (i + 1) * A) % (n + 1);
        B2 = (1LL * (i + 1) * B) % (n + 1);
        C2 = (1LL * (i + 1) * C) % (n + 1);

        A = A2;
        B = B2;
        C = C2;
    }

    display();

    return 0;
}