Cod sursa(job #2697649)

Utilizator valentinchipuc123Valentin Chipuc valentinchipuc123 Data 19 ianuarie 2021 11:14:19
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int n,v[400005],x,q,sol;

void uptade(int nod,int st,int dr,int a,int b)
{
    if(a<=st&&dr<=b)
    {
        v[nod]=x;
        return;
    }
    else
    {
        int mij=(st+dr)/2;
        if(a<=mij) uptade(2*nod,st,mij,a,b);
        if(b>mij) uptade(2*nod+1,mij+1,dr,a,b);
        v[nod]=max(v[2*nod],v[2*nod+1]);
    }
}
void compute(int nod,int st,int dr,int a,int b)
{
    if(a<=st&&dr<=b)
    {
        sol=max(v[nod],sol);
        return;
    }
    else
    {
        int mij=(st+dr)/2;
        if(a<=mij) compute(2*nod,st,mij,a,b);
        if(b>mij) compute(2*nod+1,mij+1,dr,a,b);
    }

}


int main()
{
    f>>n>>q;
    for(int i=1; i<=n; i++)
    {
        f>>x;
        uptade(1,1,n,i,i);
    }

    for(int i=1; i<=q; i++)
    {
        int t,a,b;
        f>>t>>a>>b;
        x=b;
        if(t==1) uptade(1,1,n,a,a);
        if(t==0)
        {
            compute(1,1,n,a,b);
            g<<sol<<'\n';
        }
        sol=0;
    }
}