Cod sursa(job #2221986)

Utilizator tiberiu392Tiberiu Ungurianu tiberiu392 Data 16 iulie 2018 11:56:51
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");

const int nmax = 100005;
int n, m, i, a[nmax], mij;
int arb[4*nmax], gx, gy, val, maxim, tip;

void update(int cod, int st, int dr)
{
    if( gx <= st && gy >=dr )
    {
        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 dr, int st)
{
    if( gx <=  st && gy >= dr)
    {
        maxim = (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 ( int i = 1 ; i <= n ; i++ )
        f >> a[i];

     for ( i = 1 ; i <= n ; i++ )
     {
         gx = gy = i ;
         val = a[i];
         update( 1, 1, n);
     }
    while ( m > 0 ) {
        f >> tip;
        if( tip == 0 )
        {
             f >> gx >> gy;
             maxim = 0;
             query (1, 1, n);
              g << maxim <<" ";
        }
        else
        {
            f >> gx >> val;
            gx = gy;
            update ( 1, 1, n );
        }
    m--;
    }

    return 0;
}