Cod sursa(job #3314355)

Utilizator Victor5539Tanase Victor Victor5539 Data 9 octombrie 2025 20:10:05
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <iostream>
#include <fstream>
#define ll long long
using namespace std;
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");

const int MAX=1e6;
int n,i,j,v[MAX+5],sum;
ll a,b,c;

struct node{
int sum,lazy;}A[4*MAX+5];

void propagate(int nod ,int st ,int dr)
{
    if (A[nod].lazy!=0)
    {
        A[nod].sum=A[nod].lazy;

        if (st!=dr)
        {
            A[2*nod].lazy=A[nod].lazy;
            A[2*nod+1].lazy=A[nod].lazy;
        }

        A[nod].lazy=0;
    }
}

void updatelazy(int nod, int st ,int dr ,int a, int b, int val)
{
    if (a<=st && dr<=b)
    {
        A[nod].lazy=val;
        propagate(nod,st,dr);
    }
    else
    {
        int mij=(st+dr)>>1;

        if (a<=mij)
            updatelazy(2*nod,st,mij,a,b,val);

        if (b>mij)
            updatelazy(2*nod+1,mij+1,dr,a,b,val);

        propagate(2*nod,st,mij);
        propagate(2*nod+1,mij+1,dr);
    }
}

void query(int nod, int st ,int dr ,int a, int b)
{
    propagate(nod,st,dr);
    if (a<=st && dr<=b)
        sum+=A[nod].sum;
    else
    {
        int mij=(st+dr)>>1;

        if (a<=mij)
            query(2*nod,st,mij,a,b);

        if (b>mij)
            query(2*nod+1,mij+1,dr,a,b);

        propagate(2*nod,st,mij);
        propagate(2*nod+1,mij+1,dr);
    }
}


int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(0); fout.tie(0);

    fin>>n>>a>>b>>c;

    for (i=1; i<=n-1; i++)
    {
        updatelazy(1,1,n-1,min(a,b),max(a,b),c);

        a=(ll)a*(ll)(i+1)%(ll)n;
        b=(ll)b*(ll)(i+1)%(ll)n;
        c=(ll)c*(ll)(i+1)%(ll)n;
    }

    for (i=1; i<=n-1; i++)
        {
            sum=0;
            query(1,1,n-1,i,i);
            fout<<sum<<"\n";
        }

    return 0;
}