Cod sursa(job #2839183)

Utilizator RTG123Razvan Diaconescu RTG123 Data 25 ianuarie 2022 13:52:05
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,v[400001],type,a,b,adi[400001],maxq;
void UPDATE (int cur,int st,int dr,int a,int b,int x)
{
    //cout<<cur<<' '<<st<<' '<<dr<<' '<<a<<' '<<b<<'\n';
    if (a<=st && dr<=b)
    {
        //cout<<cur<<' ';
        adi[cur]=x;
    }
    else
    {
        int mij=(st+dr)/2;
        if (a<=mij)
            UPDATE(2*cur,st,mij,a,b,x);
        if (b>mij)
        {
            UPDATE(2*cur+1,mij+1,dr,a,b,x);
        }
        adi[cur]=max(adi[2*cur],adi[2*cur+1]);
    }
}
void QUERY (int cur,int st,int dr,int a,int b)
{
    if (a<=st && dr<=b)
    {
        maxq=max(maxq,adi[cur]);
    }
    else
    {
        int mij=(st+dr)/2;
        if (a<=mij)
            QUERY(2*cur,st,mij,a,b);
        if (b>mij)
            QUERY(2*cur+1,mij+1,dr,a,b);
    }
}
int main()
{
    f>>n>>m;
    for (int i=1; i<=n; i++)
    {
        f>>v[i];
        UPDATE(1,1,n,i,i,v[i]);
    }
    for (int i=1; i<=m; i++)
    {
        f>>type>>a>>b;
        if (type==1)
        {
            UPDATE(1,1,n,a,a,b);
        }
        if (type==0)
        {
            maxq=0;
            QUERY(1,1,n,a,b);
            g<<maxq<<'\n';
        }
        /*for (int i=1; i<=n; i++)
            cout<<v[i]<<' ';
        cout<<'\n';*/
    }
    return 0;
}