Cod sursa(job #1795592)

Utilizator proflaurianPanaete Adrian proflaurian Data 2 noiembrie 2016 18:08:16
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int p=400003;
int n,m,i,j,a,b,c,z=1,aint[p],get_max(int,int,int);
int main()
{
    f>>n>>m;
    while(z<n)z=2*z;
    for(i=1,j=z;i<=n;i++,j++)
        f>>aint[j];
    for(j=z-1;j>=1;j--)
        aint[j]=max(aint[2*j],aint[2*j+1]);
    for(;m;m--)
    {
        f>>c>>a>>b;
        if(c==0)
            g<<get_max(1,1,z)<<'\n';
        else
        {
            j=z-1+a;
            aint[j]=b;
            for(j/=2;j>=1;j/=2)
                aint[j]=max(aint[2*j],aint[2*j+1]);

        }
    }

    return 0;
}
int get_max(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(get_max(2*nod,st,mi),get_max(2*nod+1,mi+1,dr));
}