Cod sursa(job #1540506)

Utilizator AlexDimaAlex Dima AlexDima Data 2 decembrie 2015 20:55:48
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
# include "fstream"
using namespace std ;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

const int MAX = 4e5+12;
int arb [ MAX ] ;

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

inline int query (int nod , int st , int dr , int a , int b)
{
    if (a <= st and dr <= b)
        return arb [nod] ;
    int mij = (st + dr)/2,max1=0,max2=0;
    if (a <= mij)
        max1 = query (nod*2 , st , mij , a , b) ;
    if (b > mij)
        max2 = query (nod * 2 + 1 , mij + 1 , dr , a , b) ;
    return max (max1 , max2) ;
}

int main()
{
    int n , m ;
    fin>> n >> m ;
    for(int i=1;i<=n;i++)
    {
        int x ;
        fin>> x ;
        update (1 , 1 , n , i , x) ;
    }
    while ( m -- )
    {
        int tip ;
        fin>> tip ;
        if ( tip == 0 )
        {
            int a , b ;
            fin>> a >> b ;
            fout<< query ( 1 , 1 , n , a , b ) << "\n" ;
        }
        else {
            int a , b ;
            fin>> a >> b ;
            update ( 1 , 1 , n , a , b ) ;
        }
    }
    return 0;
}