Cod sursa(job #2225169)

Utilizator tiberiu392Tiberiu Ungurianu tiberiu392 Data 26 iulie 2018 11:23:53
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#define dim 100005
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");

int n, m, i, caz, maxim, gx, gy , val, mij;
int v[dim], arb [4*dim];
void update( int cod , int st, int dr)
{
    if( gx <= st && dr <= gy)
    {
        arb[cod] = val;
        return;
    }
    mij = (st+dr)/2;

    if( gx <= mij )
    update( 2*cod, st, mij);
    if( gy > mij )
        update(2*cod+1, mij+1, dr);

     arb[cod] = max(arb[2*cod], arb[2*cod+1]);
}

void  query( int cod, int st, int dr )
{
    if( gx <= st && dr <= gy )
    {
        maxim = max( maxim, arb[cod] );
        return;
    }
    mij = ( st+dr)/2;
    if( gx <= mij )
        query(2*cod, st, mij);
    if( gy > mij )
        query(2*cod+1, mij+1, dr);

}


int main()
{
    f >> n >> m ;
    for ( i = 1 ; i <= n; ++i )
        f >> v[i];

     for( i = 1 ; i <= n ; i++ )
     {
        gx = gy = i;
        val = v[i];
        update( 1, 1, n);
     }

    while ( m > 0 )
    {
         f >> caz ;
         if ( caz == 0 )
         {
             f >> gx >> gy;
             maxim = 0;
             query( 1, 1, n);
             g << maxim << "\n";
         }
         else
         {
                f >> gx >> val;
                gy = gx;
                update( 1, 1, n);
        }
        m--;
    }

   return 0;
}