Cod sursa(job #2572982)

Utilizator NashikAndrei Feodorov Nashik Data 5 martie 2020 15:16:17
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 cin("arbint.in");
ofstream cout("arbint.out");
int arb[400005],ss,dd,ind,val,n,m;
int query(int st,int dr,int nod){
    if(dr<ss)
        return 0;
    if(dd<st)
        return 0;
    if(ss<=st and dr<=dd){
        return arb[nod];
    }
    return max(query(st,(st+dr)/2,nod*2),query((st+dr)/2+1,dr,nod*2+1));
}
void update(int st,int dr,int nod){
    if(dr<ind)
        return;
    if(st>ind)
        return;
    if(st==dr){
        arb[nod]=val;
        return;
    }
    update(st,(st+dr)/2,nod*2);
    update((st+dr)/2+1,dr,nod*2+1);
    arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int a;
        cin>>a;
        ind=i;
        val=a;
        update(1,n,1);
    }

    for(int i=1;i<=m;i++){
        int cer;
        cin>>cer;
        if(cer==0){
            cin>>ss;
            cin>>dd;
            cout<<query(1,n,1)<<"\n";
        }
        else{
            cin>>ind>>val;
            update(1,n,1);
        }
    }
    return 0;
}