Cod sursa(job #2256164)

Utilizator Victor_InczeVictor Incze Victor_Incze Data 8 octombrie 2018 09:14:22
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#define MAXN 100005

using namespace std;

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

int x, a, b, arb[4*MAXN], n, m;

int query(int nod, int st, int dr, int a, int b)
{
    if (a<=st && dr<=b)
        return arb[nod];
    int mij, left=0, right=0;
    mij=(st+dr)/2;
    if (a<=mij)
        left=query(2*nod,st,mij,a,b);
    if (b>mij)
        right=query(2*nod+1,mij+1,dr,a,b);
    return max(left,right);
}

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

int main()
{
    in >> n >> m;
    for (int i=1; i<=n; i++)
    {
        in >> x;
        update(1,1,n,i,x);
    }
    for (int i=1; i<=m; i++)
    {
        in >> x >> a >> b;
        if (!x)
            out << query(1,1,n,a,b) << '\n';
        else
            update(1,1,n,a,b);
    }
    return 0;
}