Cod sursa(job #1737908)

Utilizator triscacezarTrisca Vicol Cezar triscacezar Data 5 august 2016 12:01:14
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>

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