Cod sursa(job #2478564)

Utilizator andrei42Oandrei42O andrei42O Data 22 octombrie 2019 13:28:06
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int N = (1<<18)+10;
int n,m,z,a[N],cod,L,R,getMax(int,int,int);
int main()
{
    f>>n>>m;
    z=1;while(z<n)z*=2;
    z--;
    for(int i=1;i<=n;i++)
        f>>a[z+i];
    for(int i=z;i>=1;i--)
        a[i]=max(a[2*i],a[2*i+1]);
    for(;m;m--)
    {
        f>>cod>>L>>R;
        if(cod)
        {
            a[z+L]=R;
            for(int i=(z+L)/2;i;i/=2)
                a[i]=max(a[2*i],a[2*i+1]);
        }
        else
            g<<getMax(1,1,z+1)<<'\n';
    }
    return 0;
}
int getMax(int nod,int st,int dr)
{
    if(L<=st&&dr<=R)
        return a[nod];
    if(L>dr||st>R)
        return 0;
    int mi=(st+dr)/2;
    return max(getMax(2*nod,st,mi),getMax(2*nod+1,mi+1,dr));
}