Cod sursa(job #2011506)

Utilizator ioanadarcCristina Arc ioanadarc Data 16 august 2017 14:48:12
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
#define Nmax 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int arb[4*Nmax], ans, n, m, x, qu;

void upd(int nod, int l, int r, int poz, int val)
{
    int middle = (l + r) / 2;

    if(l == r)
    {
        arb[nod] = val;
        return;
    }

    if(poz <= middle)
        upd(2*nod, l, middle, poz, val);
    else upd(2*nod + 1, middle + 1, r, poz, val);

    arb[nod] = max(arb[2*nod], arb[2*nod + 1]);
}
void q(int nod, int left, int right, int L, int R)
{
    int middle = (left + right) / 2;

    if(L <= left && right <= R)
    {
       ans = max(ans, arb[nod]);
       return;
    }
    if(left > R || right < L)
    {
        return;
    }

    q(2*nod, left, middle, L, R);
    q(2*nod + 1, middle + 1, right, L, R);
}
int main()
{
    int l, r;
    fin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        fin >> x;
        upd(1, 1, n, i, x);
    }
    for(int i = 1; i <= m; i++)
    {
        fin >> qu >> l >>r;
        if(qu == 1)upd(1, 1, n, l, r);
        else
        {
            ans = 0;
            q(1, 1, n, l, r);
            fout << ans <<'\n';
        }
    }
    return 0;
}