Cod sursa(job #2225170)

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

const int nmax = 100005;
int n, m, i, v[nmax];
int arb[4*nmax], gx, gy, val, maxim, caz;
void update( int cod , int st, int dr)
{
    if( gx <= st && dr <= gy)
    {
        arb[cod] = val;
        return;
    }
    int 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;
    }
    int 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;
}