Cod sursa(job #2365150)

Utilizator danin01Nastase Daniel danin01 Data 4 martie 2019 12:15:24
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#define NMAX 10005

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int v[NMAX*4],N,m,ait[NMAX*4];

void update(int nod,int st,int dr,int poz,int val)
{

    if(st==dr && st==poz)
    {
        v[nod]=val;
        return;
    }
    if (st > poz || dr < poz)
        return;

        int mij = (st+dr)/2;

        update(nod*2,st,mij,poz,val);
        update(nod*2+1,mij+1,dr,poz,val);

        v[nod] = max(v[2*nod],v[2*nod+1]);

}

int query(int nod,int st,int dr,int a,int b)
{

    if(a<=st && dr<=b)
    {
        return v[nod];
    }
    if (a > dr || b < st)
        return 0;
    int mij = (st+dr)/2;

    int aux1=query(2*nod,st,mij,a,b);
    int aux2=query(2*nod+1,mij+1,dr,a,b);

    return max(aux1,aux2);
}

int main()
{
    f>>N>>m;

    for(int U=1;U<=N;++U)
    {
        int T;
        f>>T;
        update(1,1,N,U,T);

    }

    while(m)
    {

        int c,x,y;
        f>>c>>x>>y;

        if(c==1)
        {

            update(1,1,N,x,y);

        }
        else
        {
            g<<query(1,1,N,x,y)<<'\n';
        }

        m--;
    }

    return 0;
}