Cod sursa(job #2201340)

Utilizator verde.cristian2005Verde Flaviu-Cristian verde.cristian2005 Data 4 mai 2018 12:40:31
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int arbore[60001],max1;
void godeep(int nod,int val,int a,int b,int poz)
{
    if(a==b)
        {arbore[nod]=val;return;}
    int mij=(a+b)/2;
    if(poz<=mij)
        godeep(2*nod,val,a,mij,poz);
    if(poz>mij)
        godeep(2*nod+1,val,mij+1,b,poz);
    arbore[nod]=max(arbore[2*nod],arbore[2*nod+1]);
}
void query(int nod,int a,int b,int ua,int ub)
{
    if(a>=ua&&b<=ub)
        max1=max(max1,arbore[nod]);
    else
    {
        int mij=(a+b)/2;
        if(ua<=mij)
            query(2*nod,a,mij,ua,ub);
        if(ub>mij)
            query(2*nod+1,mij+1,b,ua,ub);
    }
}
int main()
{
    int n,m,a,b,c,i,x;
    in>>n>>m;
    for(i=1; i<=n; i++)
    {
        in>>x;
        godeep(1,x,1,n,i);
    }
    for(i=1; i<=m; i++)
    {
        in>>c>>a>>b;
        if(c==1)
            godeep(1,-b,1,n,a);
        else
        {
            max1=0;
            query(1,1,n,a,b);
            out<<max1<<'\n';
        }
    }
    return 0;
}