Cod sursa(job #3128485)

Utilizator fabian_anghelFabian Anghel fabian_anghel Data 9 mai 2023 17:04:14
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
using namespace std;
int M,N,arb[500001],x,a,b,c;
ifstream f ("arbint.in");
ofstream g ("arbint.out");
void upd(int nod, int st, int dr, int p, int val)
{
    if(st==dr)
        arb[nod]=val;
    else
    {
        int mij=(st+dr)/2;
        if(p<=mij)
            upd(2*nod,st,mij,p,val);
        else
            upd(2*nod+1,mij+1,dr,p,val);
        arb[nod]=max(arb[2*nod],arb[2*nod+1]);
    }
}
int query(int nod, int st, int dr, int a, int b)
{
    if(st==a && dr==b)
        return arb[nod];
    else
    {
        int mij=(st+dr)/2;
        if(b<=mij)
            return query(2*nod,st,mij,a,b);
        else if(a>mij)
            return query(2*nod+1,mij+1,dr,a,b);
        else
            return max(query(2*nod,st,mij,a,mij), query(2*nod+1,mij+1,dr,mij+1,b));
    }
}
int main()
{
    f>>N>>M;
    for(int i=1;i<=N;i++)
    {
        f>>x;
        upd(1,1,N,i,x);
    }
    for(int i=1;i<=M;i++)
    {
        f>>c>>a>>b;
        if(c==1)
            upd(1,1,N,a,b);
        else
            g<<query(1,1,N,a,b)<<'\n';
    }
    f.close();
    g.close();
    return 0;
}