Cod sursa(job #1419813)

Utilizator Burbon13Burbon13 Burbon13 Data 16 aprilie 2015 17:02:52
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <cstdio>
#include <iostream>

using namespace std;

const int mx = 100005;

int n,m,a,b,maxim,c;
int arb[4*mx];

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

inline void query(int nod, int st, int dr){
    if ( a <= st && b >= dr ){
        if ( maxim < arb[nod] )
            maxim = arb[nod] ;
        return ;
    }
    int mij = (st + dr) / 2;
    if (a <= mij)
        query(2 * nod, st, mij);
    if (b > mij)
        query(2 * nod + 1, mij + 1, dr);
}

int main(){
    freopen( "arbint.in" , "r" , stdin );
    freopen( "arbint.out" , "w" , stdout );

    int nr ;
    scanf( "%d %d" , &n , &m ) ;
    for (a = 1 ; a <= n ; a ++){
        scanf( "%d" , &b );
        update(1,1,n);
    }
    for (int i = 1 ; i <= m ; i++){
        scanf( "%d %d %d" , &c , &a , &b );
        if ( not c ){
            maxim = 0;
            query(1, 1, n);
            printf( "%d\n" , maxim );
        }
        else
            update(1, 1, n);
    }
    return 0;
}