Cod sursa(job #3276127)

Utilizator Alex_BerbescuBerbescu Alexandru Alex_Berbescu Data 12 februarie 2025 19:04:32
Problema Curcubeu Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#pragma GCC optimize("O3")
#pragma GCC optimize("fast-math")
#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define ll long long
#define mod 100003




using namespace std;
const int dim = 1e6 + 55;


struct event
{
    int st, dr, color;


};
vector<event>vect[dim];



int a1, b1, c1, n;
int tata[dim], sol[dim];

event stiva[dim];


bool intersec(int a1, int b1, int c1, int d1)
{
    int mini = min(b1, d1);
    int maxi = max(a1, c1);
    return (maxi <= mini);
}


int findu(int x)
{
    if(x == tata[x])
        return x;
    return tata[x] = findu(tata[x]);
}
void unionu(int x, int y)
{
    int a = findu(x);
    int b = findu(y);
    if(a != b)
    {
        tata[b] = a;
    }
}




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



int32_t main(int argc, char * argv[])
{
   fin >> n >> a1 >> b1 >> c1;
    vect[1].push_back({min(a1, b1), max(a1, b1), c1});
    tata[1] = 1, tata[0] = 0;
   for(int i = 2; i <= n; ++i)
   {
       a1 = (a1 * i) % n;
       b1 = (b1 * i) % n;
       c1 = (c1 * i) % n;
        vect[i].push_back({min(a1, b1), max(a1, b1), c1});
        tata[i] = i;
   }
   for(int i = n - 1; i >= 1; --i)
   {
       int poz = findu(vect[i][0].st);
       while(poz <= vect[i][0].dr)
       {
           sol[poz] = vect[i][0].color;
           tata[poz] = vect[i][0].dr + 1;
           poz = findu(poz + 1);
       }
   }
   for(int i = 1; i < n; ++i)
    fout << sol[i] << '\n';
    return 0;

}