Cod sursa(job #2223151)

Utilizator stefantagaTaga Stefan stefantaga Data 19 iulie 2018 10:11:34
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[400005];
void actualizare (int a,int b,int nod,int poz,int val)
{
    int mij;
    if (a==b)
    {
        arb[nod]=val;
    }
    else
    {
        mij=(a+b)/2;
        if (poz<=mij)
        {
            actualizare(a,mij,nod*2,poz,val);
        }
        else
        {
            actualizare(mij+1,b,nod*2+1,poz,val);
        }
        arb[nod]=max(arb[nod*2],arb[nod*2+1]);
    }
}
int intrebare(int a,int b,int nod,int qa,int qb)
{
    int mij,r1=0,r2=0;
    if (qa<=a&&b<=qb)
    {
        return arb[nod];
    }
    mij=(a+b)/2;
        if (qa<=mij)
        {
            r1=intrebare(a,mij,2*nod,qa,qb);
        }
        if (qb>mij)
        {
            r2=intrebare(mij+1,b,2*nod+1,qa,qb);
        }
        return max(r1,r2);
}
int x,y,z,i;
int main()
{
    int n,m;
    f>>n>>m;
    for (i=1;i<=n;i++)
    {
        f>>x;
        actualizare(1,n,1,i,x);
    }
    for (i=1;i<=m;i++)
    {
        f>>x>>y>>z;
        if (x==1)
        {
            actualizare(1,n,1,y,z);
        }
        else
        {
            g<<intrebare(1,n,1,y,z)<<'\n';
        }
    }
    return 0;
}