Cod sursa(job #3133263)

Utilizator z.catincaCatinca Zavoianu z.catinca Data 25 mai 2023 13:49:32
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include<fstream>
#include<iostream>
#define dim 100001
#define maxim(x,y) (x)>(y)?(x):(y)

long arb[dim*3],jum,max;

void update(long nod,long st, long dr, long poz, long val)
{if(st==dr) arb[nod]=val;
    else
    {
        jum=(st+dr)/2;

        if(poz<=jum) update(nod*2,st,jum,poz,val);
        else update(nod*2+1,jum+1,dr,poz,val);

        arb[nod]=maxim(arb[nod*2],arb[nod*2+1]);
    }
}

void query(long nod, long st,  long dr, long a, long b)
{
    if((a<=st)&&(b>=dr))
    {
        if(max<arb[nod]) max=arb[nod];
    }
    else
    {
        if(a<=((st+dr)/2)) query(nod*2,st,(st+dr)/2,a,b);
        if(b>((st+dr)/2)) query(nod*2+1,((st+dr)/2)+1,dr,a,b);
    }
}

int main()
{
    std::ifstream f("arbint.in");
    std::ofstream g("arbint.out");

    long n,m,i,a,b,x;

    f>>n>>m;

    for(i=1;i<=n;i++)
    {
        f>>x;
        update(1,1,n,i,x);
    }

    for(i=1;i<=m;i++)
    {
        f>>x>>a>>b;

        if(x==0)
        {
            max=0;
            query(1,1,n,a,b);
            g<<max<<'\n';
        }
        else update(1,1,n,a,b);

    }

    return 0;

}