Cod sursa(job #1325028)

Utilizator Emilia26Hangan Emilia Emilia26 Data 23 ianuarie 2015 09:28:41
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#define MAX 100001
using namespace std;

ifstream is("arbint.in");
ofstream os("arbint.out");

int arb[4*MAX];
int n, m, a, b, op, mx;

void Update( int nod, int st, int dr )
{
    if ( st == dr )
    {
        arb[nod] = b;
        return;
    }
    int mid = (st+dr)/2;
    if ( a <= mid )
        Update(2*nod, st, mid );
    else
        Update(2*nod+1, mid+1, dr );
    arb[nod] = max ( arb[2*nod], arb[2*nod+1] );
}

void Query( int nod, int st, int dr )
{
    if ( a <= st && dr <= b )
    {
        mx = max ( mx, arb[nod] );
        return;
    }
    int mid = (st+dr)/2;
    if ( a <= mid )
        Query( 2*nod, st, mid );
    if ( b > mid )
        Query( 2*nod+1, mid+1, dr );
}

int main()
{
    is >> n >> m;
    for ( int i = 1; i <= n; ++i )
    {
        is >> b;
        a = i;
        Update(1, 1, n);
    }
    while( m-- )
    {
        is >> op >> a >> b;
        if ( op )
            Update(1, 1, n);
        else
        {
            mx = 0;
            Query(1, 1, n);
            os << mx << '\n';
        }
    }
    is.close();
    os.close();
    return 0;
}