Cod sursa(job #2863269)

Utilizator anastefanaAna Stefan anastefana Data 6 martie 2022 15:44:44
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int t,a,b,x,n,m,ai[400001];
void update(int poz, int val, int nod, int st, int dr)
{
    if(st==dr) 
     {
         if(st==poz) ai[nod]=val;
     }
    else
    {
        int mij=(st+dr)/2;
        if(st<=poz && poz<=mij) update(poz,val,2*nod,st,mij);
        if(mij+1<=poz && poz<=dr) update(poz,val,2*nod+1,mij+1,dr);
        ai[nod]=max(ai[2*nod],ai[2*nod+1]);
    }
}
int query(int a, int b, int nod, int st, int dr)
{
    if(a<=st && b>=dr)
        return ai[nod];
    int mij=(st+dr)/2;
    if(mij<a) return query(a,b,2*nod+1,mij+1,dr);
    if(mij>=b) return query(a,b,2*nod,st,mij);
    return max(query(a,b,2*nod+1,mij+1,dr),query(a,b,2*nod,st,mij));
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
     {   
         cin>>x;
         update(i,x,1,1,n);
     }
    for(int i=1;i<=m;i++)
    {
        cin>>t>>a>>b;
        if(t==0) cout<<query(a,b,1,1,n)<<'\n';
        else update(a,b,1,1,n);
    }
    return 0;
}