Cod sursa(job #2400207)

Utilizator Leonard123Mirt Leonard Leonard123 Data 8 aprilie 2019 14:49:21
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include<fstream>
#include<stdio.h>
#include<assert.h>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
#define maxn 100050
int arb[4*maxn],N,M,val,poz,start,stop,maxim,op;

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

void query(int nod, int st, int dr){
        if(start<=st && dr<=stop){
            if(maxim<arb[nod])
                maxim=arb[nod];
            return;
        }
        int mij=(dr+st)/2;
        if(start<=mij) query(2*nod,st,mij);
        else           query(2*nod+1,mij+1,dr);
}
int main(){
    cin>>N>>M;
    for(int i=1; i<=N; i++){
        poz=i;
        cin>>val;
        update(1,1,N);
    }

    for(int i=1; i<=M; i++){
       cin>>op;
       if(op==1){
        cin>>poz>>val;
       update(1,1,N);
       }else{
       cin>>start>>stop;
       maxim=-1;
       query(1,1,N);
       cout<<maxim<<'\n';
       }
    }
}