Cod sursa(job #1764692)

Utilizator enouGhAbu Ras Mohamed Ata Radu enouGh Data 25 septembrie 2016 20:02:09
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include<bits/stdc++.h>
using namespace std;

int dr,st,v[400040],mijloc,val,x,y,z,N,M;

void actualizare(int nod ,int st ,int dr ,int a ,int b)
{
    if ( st == dr )
    {
        v[nod] = b;
    }else
    {
        mijloc = (st + dr)/2;
        if ( a <= mijloc )
            actualizare(2 * nod , st , mijloc , a , b);
        else
            actualizare(2*nod + 1 , mijloc + 1 , dr , a , b );
        v[nod] = max( v[ nod * 2 ] , v[ nod * 2 + 1]);
    }
}

void interogare(int nod , int st , int dr ,int a , int b)
{
    if ( a <= st && dr <= b )
    {
        val = max(val , v[nod]);
    }else
    {
        mijloc = (st + dr)/2;
        if( a <= mijloc)
            interogare( 2 * nod , st , mijloc , a, b);
        else
            interogare( 2 * nod + 1, mijloc + 1 , dr ,a , b);
    }
}


int main()
{
    ifstream in("arbint.in");
    ofstream out("arbint.out");

    in>>N>>M;

    for (int i = 1; i <= N ; i++)
    {
        in>>x;
        actualizare( 1 , 1 , N, i , x);
    }

    for (int i = 1; i <= M ; i++)
    {
        in>>z>>x>>y;
        if( z == 1)
            actualizare( 1 , 1 , N , x ,y );
        else
        {
            val = -1;
            interogare(1 , 1 ,N , x ,y );
            out<<val<<'\n';
        }
    }
    return 0;
}