Cod sursa(job #2166523)

Utilizator chioreanraulChiorean Raul chioreanraul Data 13 martie 2018 17:35:01
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>

using namespace std;
int Arb[400005],i,x,n,m,p,y;

ifstream fin("arbint.in");
ofstream fout("arbint.out");
void Update( int nod, int st, int dr, int poz, int val )
{
    if( st == dr )
     {
         Arb[ nod ] = val;
         return;
     }
    else
    {
        int mij = ( st + dr ) / 2;
        if( poz <= mij )
        {
            Update( nod * 2, st ,mij, poz, val );
        }
        else
        {
          Update( nod * 2 + 1, mij + 1, dr, poz, val);
        }
        Arb[ nod ] = max( Arb[ nod * 2 ], Arb[ nod * 2  + 1 ] );
    }
}

int Query( int nod, int st, int dr, int a, int b )
{
    if( dr < a or st > b )
        return 0;
    if( st >= a and dr <= b )
    {
        return Arb[ nod ];
    }
    else
    {
        int mij = ( st + dr ) / 2;
        return max( Query( nod * 2, st, mij, a, b), Query( nod * 2 + 1 , mij + 1, dr, a, b ) );
    }
}
int main()
{
    fin>>n>>m;
    for( i = 1; i <= n; i++ )
    {
        fin>>x;
        Update( 1 , 1, n, i  , x );
    }
     for( i = 1; i <= m; i++ )
     {
         fin>>p>>x>>y;
        if( p == 1 )
        {
            Update( 1 , 1 , n , x , y );
        }
        else
        {
            fout<<Query(1, 1, n, x ,y )<<'\n';
        }
     }

    return 0;
}