Cod sursa(job #2880323)

Utilizator popescuadrianpopescuadrian popescuadrian Data 29 martie 2022 16:58:21
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <fstream>

using namespace std;
ifstream cin("curcubeu.in");
ofstream cout("curcubeu.out");
int lazy[4000005];
int tree[4000005];
int n;
void update (int node,int st,int dr,int qst,int qdr,int cul)
{
    if(lazy[node]!=0)
    {
        tree[node]=lazy[node];
        if(st!=dr)
        {
            lazy[node*2]=lazy[node];
            lazy[node*2+1]=lazy[node];
        }
    }
    if(qst>dr || qdr<st)
    {
        return;
    }
    if(qst<=st && dr<=qdr)
    {
        lazy[node]=cul;
        tree[node]=lazy[node];
        if(st!=dr)
        {
            lazy[node*2]=lazy[node];
            lazy[node*2+1]=lazy[node];
        }
        return;
    }
    else
    {
        int mij=(st+dr)/2;
        update(2*node,st,mij,qst,qdr,cul);
        update(2*node+1,mij+1,dr,qst,qdr,cul);
    }
}
void querry (int node,int st,int dr)
{
    if(lazy[node]!=0)
    {
        tree[node]=lazy[node];
        if(st!=dr)
        {
            lazy[node*2]=lazy[node];
            lazy[node*2+1]=lazy[node];
        }
    }
    if(st==dr)
    {
        cout<<tree[node]<<'\n';
        return;
    }
    else
    {
        int mij=(st+dr)/2;
        querry(2*node,st,mij);
        querry(2*node+1,mij+1,dr);
        return;
    }
}
int main()
{
    int i,j,k,a,b,c,st,dr;
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n>>a>>b>>c;
    for(i=1; i<n; i++)
    {
        a=(a*i)%n;
        b=(b*i)%n;
        c=(c*i)%n;
        st=min(a,b);
        dr=max(a,b);
        update(1,1,n-1,st,dr,c);
    }
    querry(1,1,n-1);
    return 0;
}