Cod sursa(job #2478711)

Utilizator teodorgTeodor G teodorg Data 22 octombrie 2019 16:47:59
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

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