Cod sursa(job #2360718)

Utilizator MDiana15Diana M MDiana15 Data 2 martie 2019 09:14:10
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#define NMAX (1<<19)
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int m,n,val,poz,a,b,T[NMAX],c,  i;
void update(int nod,int st,int dr)
{
    if(st==dr)T[nod]=val;
    else{
        int mij=(st+dr)/2;
        if(poz<=mij)update(nod*2,st,mij);
        else update(nod*2+1,mij+1,dr);
        T[nod]=max(T[nod*2],T[nod*2+1]);
    }
}
int query(int nod,int st,int dr)
{
    int mij,x1=0,x2=0;
    if(a<=st&&dr<=b)return T[nod];
    else{
        mij=(st+dr)/2;
        if(a<=mij)x1=query(nod*2,st,mij);
        if(b>=mij+1)x2=query(nod*2+1,mij+1,dr);
        return max(x1,x2);
    }
}
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>val;
        poz=i;
        update(1,1,n);
    }

    for(i=1;i<=m;i++)
    {
        f>>c>>a>>b;
        if(c==1)
        {
            poz=a;
            val=b;
            update(1,1,n);
        }
        else
        {
            g<<query(1,1,n)<<'\n';
        }
    }
    return 0;
}