Cod sursa(job #2438664)

Utilizator AndreiStrAndrei Stroici AndreiStr Data 13 iulie 2019 12:11:56
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int64_t v[1<<18];
int64_t n,p=1,r,a,b,c,m;
int get_max(int,int,int);

int main()
{
    f>>n>>m;
    while(p<n)
        p*=2;
    r=p-1;
    for(int i=1;i<=n;i++)
        f>>v[i+r];
    for(int i=r;i>=1;i--)
        v[i]=max(v[2*i],v[2*i+1]);
    for(;m;m--)
    {
        f>>c>>a>>b;
        if(c==0)
            g<<get_max(1,1,p)<<'\n';
        else
        {
            a+=r;
            v[a]=b;
            for(a/=2;a;a/=2)
                v[a]=max(v[2*a],v[2*a+1]);
        }
    }
    return 0;
}
int get_max(int nod,int lo,int hi)
{
    if(a<=lo&&hi<=b)
        return v[nod];
    if(a>hi||lo>b)
        return 0;
    int mi=(lo+hi)/2;
    return max(get_max(2*nod,lo,mi),get_max(2*nod+1,mi+1,hi));
}