Cod sursa(job #2744039)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 23 aprilie 2021 20:39:25
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
vector<int> arb(8000000);

int update(int st,int dr, int poz, int val,int nod){
    if(st==dr){
        arb[nod]=val;
        return arb[nod];
    }
    int mij=(st+dr)/2;
    if(poz<=mij) arb[nod]=max(update(st,mij,poz,val,nod*2),arb[nod*2+1]);
    else arb[nod]=max(arb[nod*2],update(mij+1,dr,poz,val,nod*2+1));
    return arb[nod];
}

int query(int st,int dr,int nod,int p1,int p2){
    if(p1>p2)return 0;
    int mij=(st+dr)/2;
    if(st==p1&&dr==p2) return arb[nod];
    return max(query(st,mij,nod*2,p1,min(mij,p2)),query(mij+1,dr,nod*2+1,max(p1,mij+1),p2));
}

int main(){
    int n,m;
    in>>n>>m;
    for(int i=1;i<=n;i++){
        int nr;
        in>>nr;
        update(1,n,i,nr,1);
    }

    for(int i=0;i<m;i++){
        int a,b,c;
        in>>c>>a>>b;
        if(c==1) update(1,n,a,b,1);
        else {
            out<<query(1,n,1,a,b)<<"\n";
        }
    }

}