Cod sursa(job #2833643)

Utilizator ana_valeriaAna Valeria Duguleanu ana_valeria Data 15 ianuarie 2022 14:15:56
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
int aint[400010];
void update(int nod,int st,int dr,int poz,int val)
{
    int mijl;
    if (st==dr)
    {
        aint[nod]=val;
        return ;
    }
    mijl=(st+dr)/2;
    if (poz<=mijl)
        update(2*nod,st,mijl,poz,val);
    else
        update(2*nod+1,mijl+1,dr,poz,val);
    aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
int query(int nod,int st,int dr,int qst,int qdr)
{
    int val1=0,val2=0,mijl;
    if (qst<=st && dr<=qdr)
        return aint[nod];
    mijl=(st+dr)/2;
    if (qst<=mijl)
        val1=query(2*nod,st,mijl,qst,qdr);
    if (mijl<qdr)
        val2=query(2*nod+1,mijl+1,dr,qst,qdr);
    return max(val1,val2);
}
int main()
{
    int n,m,i,x,tip,st,dr;
    cin>>n>>m;
    for (i=1; i<=n; i++)
    {
        cin>>x;
        update(1,1,n,i,x);
    }
    for (i=1; i<=m; i++)
    {
        cin>>tip>>st>>dr;
        if (tip==0)
            cout<<query(1,1,n,st,dr)<<"\n";
        else
            update(1,1,n,st,dr);
    }
    return 0;
}