Cod sursa(job #1518196)

Utilizator serbanSlincu Serban serban Data 5 noiembrie 2015 18:21:34
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

int h[4000005];
int l, r, val;
int lim;

void update(int node, int st, int dr) {
    if(node >= lim)
        return ;
    if(l <= st && dr <= r) {
        h[node] = val;
        return ;
    }
    int m = (dr - st) / 2 + st;
    if(h[node])
        h[(node << 1) + 1] = h[node << 1] = h[node], h[node] = 0;
    if(l <= m) update(node << 1, st, m);
    if(r > m) update((node << 1) + 1, m + 1, dr);
}


FILE *g = fopen("curcubeu.out", "w");

void afis(int node, int st, int dr) {
    if(node >= lim)
        return ;
    if(h[node]) {
        for(int i = st; i <= dr; i ++)
            fprintf(g, "%d\n", h[node]);
        return ;
    }
    int m = (dr - st) / 2 + st;
    afis(node << 1, st, m);
    afis((node << 1) + 1, m + 1, dr);
}

int main()
{
    freopen("curcubeu.in", "r", stdin);

    int n, a, b;
    cin >> n >> a >> b >> val;
    lim = n << 1;

    for(int i = 2; i <= n; i ++) {
        l = min(a, b); r = max(a, b);
        update(1, 1, n -1);
        a = (a * i) % n;
        b = (b * i) % n;
        val = (val * i) % n;
    }

    afis(1, 1, n - 1);
    return 0;
}