Cod sursa(job #2685766)

Utilizator CiubarLoverBaiatu cu Ciubaru CiubarLover Data 17 decembrie 2020 17:47:42
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int aint[400005];
int n,m,op,a,b;
int get_max(int pos,int st,int dr,int l,int r)
{
    if(r<st || dr<l)
        return 0;
    if(l<=st && dr<=r)
        return aint[pos];
    int mid=(st+dr)/2;
    return max(get_max(pos*2,st,mid,l,r),get_max(pos*2+1,mid+1,dr,l,r));
}
void update(int pos,int st,int dr,int elem,int val)
{
    if(elem<st || dr<elem)
        return;
    if(st==dr)
    {
        aint[pos]=val;
        return;
    }
    int mid=(st+dr)/2;
    update(pos*2,st,mid,elem,val);
    update(pos*2+1,mid+1,dr,elem,val);
    aint[pos]=max(aint[pos*2],aint[pos*2+1]);
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>a;
        update(1,1,n,i,a);
    }
    while(m--)
    {
        fin>>op>>a>>b;
        if(op==0)
            fout<<get_max(1,1,n,a,b)<<"\n";
        else
            update(1,1,n,a,b);
    }
    return 0;
}