Cod sursa(job #2567139)

Utilizator andrei42Oandrei42O andrei42O Data 3 martie 2020 15:26:02
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>

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