Cod sursa(job #2722888)

Utilizator traiandobrinDobrin Traian traiandobrin Data 13 martie 2021 12:54:03
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#define nmax 100005
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int a[2*nmax],v[nmax],n;
void update(int st,int dr,int pos,int x,int nod)
{
    if(st==dr)
        a[nod]=x;
    else
    {   int mid=(st+dr)/2;
        if(pos<=mid)
            update(st,mid,pos,x,nod*2);
        if(pos>mid)
            update(mid+1,dr,pos,x,nod*2+1);
        a[nod]=max(a[nod*2],a[nod*2+1]);
    }
}
int query(int st,int dr,int aa,int b,int nod)
{
    if(st>=aa&&dr<=b)
        return a[nod];
    int mid=(st+dr)/2;
    int x=-1,y=-1;
    if(aa<=mid)
        x=query(st,mid,aa,b,nod*2);
    if(b>mid)
        y=query(mid+1,dr,aa,b,nod*2+1);
    return max(x,y);
}
int main()
{   int m;
    cin>>n>>m;
    for(int i=1;i<=n;++i)
    {
        cin>>v[i];
        update(1,n,i,v[i],1);
    }
    for(int i=1;i<=m;++i)
    {
        int t,q1,q2;
        cin>>t>>q1>>q2;
        if(t==1)
            update(1,n,q1,q2,1);
        else
            {
            cout<<query(1,n,q1,q2,1)<<'\n';
            }

    }
    return 0;
}