Cod sursa(job #1520058)

Utilizator UMihneaUngureanu Mihnea UMihnea Data 8 noiembrie 2015 11:37:29
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#include <iomanip>
#include <algorithm>
using namespace std;

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

int p, q, cod, a, b, n, i, t = 1, aint[265000], query(int, int, int);

int main()
{
    f>>n>>q;
    while(t<n)
        t*=2;
    t--;
    for(i=1;i<=n;i++)
        f>>aint[t+i];
    for(p=t;p;p--)
        aint[p]=max(aint[2*p],aint[2*p+1]);
    for(;q;q--)
    {
        f>>cod>>a>>b;
        if(cod==1)
        {
            aint[t+a]=b;
            for(p=(t+a)/2;p;p/=2)
                aint[p]=max(aint[2*p],aint[2*p+1]);
            continue;
        }
        g<<query(1,1,t+1)<<'\n';
    }
    return 0;
}
int query(int nod, int L, int R)
{
    if(b<L||R<a)
        return 0;
    if(a<=L&&R<=b)
        return aint[nod];
    return max(query(2*nod,L,(L+R)/2),query(2*nod+1,(L+R)/2+1,R));
}