Cod sursa(job #1843410)

Utilizator Sergiu1256Ionita Sergiu1256 Data 8 ianuarie 2017 18:09:19
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
using namespace std;
int n,m,arb[400100],Val,Pos,maxim,X,A,B;
int A1,B1;
inline void Update(int nod, int left, int right){
    if ( left == right ){
        arb[nod] = Val;
        return;
    }
    int div = (left+right)/2;
    if ( Pos <= div ) Update(2*nod,left,div);
    else Update(2*nod+1,div+1,right);
    arb[nod] = max( arb[2*nod], arb[2*nod+1] );
}

inline void Query(int nod, int left, int right){
    if ( A1 <= left && right <= B1 ){
        if ( maxim < arb[nod] ) maxim = arb[nod];
        return;
    }
    int div = (left+right)/2;
    if ( A1 <= div ) Query(2*nod,left,div);
    if ( div < B1 ) Query(2*nod+1,div+1,right);
}
int main(){
	ifstream fin("arbint.in");
	ofstream fout("arbint.out");
	ios_base::sync_with_stdio(0);
    fin.tie(0);
    fin>>n>>m;
    for (int i(1);i<=n; i++){
        fin>>X;
        Pos =i,Val =X;
        Update(1,1,n);
    }
    for ( int i (1); i <=m; i++)
    {
        fin>>X>>A>>B;
        if (X == 0){
            maxim =INT_MIN;
            A1=A;B1=B;
            Query(1,1,n);
            fout<<maxim<<'\n';
        }
        else{
            Pos =A,Val =B;
            Update(1,1,n);
        }
    }
}