Cod sursa(job #2287740)

Utilizator CezarTDTodirisca Cezar CezarTD Data 22 noiembrie 2018 14:00:36
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
vector<int> a;
int n,c,x,y,z,q,get_max(int,int,int);
int main()
{
    f>>n>>q;
    for(z=1;z<n;z*=2);
    a=vector<int>(2*z,0);
    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(;q;q--)
    {
        f>>c>>x>>y;
        if(c==0)
            g<<get_max(1,1,z+1)<<'\n';
        else
        {
            a[x]=y;
            for(int i=x/2;i;i/=2)
                a[i]=max(a[2*i],a[2*i+1]);
        }
    }
    return 0;
}
int get_max(int nod,int st,int dr)
{

    if(x>dr||st>y)
        return 0;
    if(x<=st&&dr<=y)
        return a[nod];
    int mi=(st+dr)/2;
    return max(get_max(2*nod,st,mi),get_max(2*nod+1,mi+1,dr));
}