Cod sursa(job #2236353)

Utilizator cezarzbughinCezar Zbughin cezarzbughin Data 29 august 2018 11:58:35
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
vector<int> aint;
int n,z,m,cod,a,b,answer(int,int,int);
int main()
{
    f>>n>>m;
    z=1;
    while(z<n)z*=2;
    aint = vector<int>(2*z,0);
    z--;
    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]);
    n=z+1;
    for(;m;m--)
    {
        f>>cod>>a>>b;
        if(cod==0)
            g<<answer(1,1,n)<<'\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 answer(int nod,int A,int B)
{
    if(A>b||a>B)return 0;
    if(a<=A&&B<=b)return aint[nod];
    int C=(A+B)/2;
    return max(answer(2*nod,A,C),answer(2*nod+1,C+1,B));
}