Cod sursa(job #1677584)

Utilizator Mr.RobotElliot Alderson Mr.Robot Data 6 aprilie 2016 17:52:46
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

#define mult 100002
#define maxim(a,b) (a>b?a:b)
int n, m, val, i, arb[3*mult], x, y, z, maxi;

void up( int poz, int stanga, int dreapta )
{
    if( stanga == dreapta )
    {
        arb[poz] = val;
    }
    else
    {
        int mij = ( stanga + dreapta )/2;
        if( i > mij )
        {
            up( 2*poz + 1, mij + 1, dreapta );
        }
        else
        {
            up( 2*poz, stanga, mij );
        }
        arb[poz] = maxim( arb[2*poz], arb[2*poz + 1]);
    }
}

void inter( int poz, int stanga, int dreapta )
{
    if( y <= stanga && dreapta <= z )
    {
        if( arb[poz] > maxi )
            maxi = arb[poz];
    }
    else
    {
        int mij = ( stanga + dreapta )/2;
        if ( y <= mij )
            inter( poz*2, stanga, mij );
        if( z > mij )
            inter( poz*2 +1, mij + 1, dreapta );
    }
}

int main()
{
    f >> n >> m;

    for( i = 1; i <= n; i ++ )
    {
        f >> val;
        up(1, 1, n);
    }

    for( int j = 1; j <= m; j ++ )
    {
        f >> x >> y >> z;
        if( x == 0 )
        {
            maxi = -1;
            inter( 1, 1, n );
            g << maxi << '\n';
        }
        else
        {
            val = z;
            i = y;
            up( 1, 1, n );
        }
    }

    return 0;
}