Cod sursa(job #3337372)

Utilizator gabi072Sanda Gabriel gabi072 Data 27 ianuarie 2026 15:14:50
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define pb push_back
#define nl '\n'
int aint[300001],v[100001],pos,val,qst,qdr,maxs;
void build(int n,int st,int dr){
    if(st==dr)
        aint[n]=v[st];
    else{
        int mid=((st+dr)>>1);
        build(2*n,st,mid);
        build(2*n+1,mid+1,dr);
        aint[n]=max(aint[2*n],aint[2*n+1]);
    }
}
void update(int n,int st,int dr){
    if(st==dr)
        aint[n]=val;
    else{
        int mid=((st+dr)>>1);
        if(pos<=mid)
            update(2*n,st,mid);
        else update(2*n+1,mid+1,dr);
        aint[n]=max(aint[2*n],aint[2*n+1]);
    }
}
void query(int n,int st,int dr){
    if(qst<=st && qdr>=dr)
        maxs=max(maxs,aint[n]);
    else{
        int mid=((st+dr)>>1);
        if(qst<=mid)
            query(2*n,st,mid);
        if(qdr>mid)
            query(2*n+1,mid+1,dr);
    }
}
int main(){
    int n,q;
    fin>>n>>q;
    for(int i=1;i<=n;++i)
        fin>>v[i];
    build(1,1,n);
    for(int i=1;i<=q;++i){
        int p;
        fin>>p;
        if(p==0){
            maxs=-1;
            fin>>qst>>qdr;
            query(1,1,n);
            fout<<maxs<<nl;
        }
        else{
            fin>>pos>>val;
            update(1,1,n);
        }
    }
}