Cod sursa(job #2495833)

Utilizator T_george_TGeorge Teodorescu T_george_T Data 19 noiembrie 2019 21:15:30
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int NMAX=100000;
int arbint[4*NMAX+5];
int n,m,val,poz,maxim,start,finish;
void update(int nod,int left,int right){
    if(left==right){
        arbint[nod]=val;
        return ;
        }
    int mij=left+(right-left)/2;
    if(poz<=mij) update(nod*2,left,mij);
    else update(nod*2+1,mij+1,right);
    arbint[nod]=max(arbint[2*nod],arbint[2*nod+1]);
}
void query(int nod,int left,int right){
    if(start<=left && right<=finish){
       maxim=max(maxim,arbint[nod]);
       return;}
    int mij=left+(right-left)/2;
    if(start<=mij) query(2*nod,left,mij);
    if(mij<finish) query(2*nod+1,mij+1,right);

}

int main()
{
    int tip,a,b;
    in>>n>>m;
    for(int i=1;i<=n;i++){
        in>>val;
        poz=i;
        update(1,1,n);
    }
    for(int i=1;i<=m;i++){
        in>>tip>>a>>b;
        if(tip){
            poz=a,val=b;
            update(1,1,n);
            continue;
        }
         start=a,finish=b,maxim=-1;
         query(1,1,n);
        out<<maxim<<'\n';
    }
    return 0;
}