Cod sursa(job #2650367)

Utilizator redstonegamer22Andrei Ion redstonegamer22 Data 18 septembrie 2020 15:47:24
Problema Curcubeu Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 1000000 + 7;

int v[NMAX];
int lft[NMAX];
int rght[NMAX];
int color[NMAX];

int skip_list[NMAX];

/*void dfs_skip(int poz)
{
    if(v[poz] != 0)
    {
        dfs_skip(skip_list[poz]);
        skip_list[poz] = skip_list[skip_list[poz]];
    }
}*/

int main()
{
    int n, a, b, c; fscanf(in, "%d%d%d%d", &n, &a, &b, &c);

    lft[1] = min(a, b);
    rght[1] = max(a, b);
    color[1] = c;

    for(int i = 2; i <= n-1; i++)
    {
        a = (1LL * a * i) % n;
        b = (1LL * b * i) % n;
        c = (1LL * c * i) % n;

        lft[i] = min(a, b);
        rght[i] = max(a, b);
        color[i] = c;
    }

    for(int i = n-1; i >= 1; i--)
    {
        for(int j = lft[i]; j <= rght[i]; j=j)
        {
            if(v[j] != 0)
            {
                int new_j = skip_list[j];
                skip_list[j] = rght[i]+1;
                j = new_j;
            }
            else
            {
                v[j] = color[i];
                skip_list[j] = rght[i]+1;
                j++;
            }
        }
    }

    for(int i = 1; i <= n-1; i++)
        fprintf(out, "%d\n", v[i]);
}