Cod sursa(job #2944226)

Utilizator al1yzalecu izsak al1yz Data 22 noiembrie 2022 10:59:21
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int s3[100000*4+3];
int v[100000+3];
void update(int node,int from,int to,int pos,int val)
{
    if(from==to)
    {
        s3[node]=val;
        return;
    }
    int mid=(from+to)/2;
    if(pos<=mid)
    {
        update(node*2,from,mid,pos,val);
    }   
    else
    {
        update(node*2+1,mid+1,to,pos,val);
    }
    s3[node]=max(s3[node*2],s3[node*2+1]);
}
int query(int node,int from,int to,int qleft,int qright)
{
    int smin=0;
    if(qleft<=from&&qright>=to)
    {
        return s3[node];
    }
    int mid=(from+to)/2;
    if(qleft<=mid)
    {
        smin=max(smin,query(node*2,from,mid,qleft,qright));
    }
    if(mid+1<=qright)
    {
        smin=max(smin,query(node*2+1,mid+1,to,qleft,qright));
    }
    return smin;
}
int main()
{
    int n;
    cin>>n;
    int t;
    cin>>t;
    //for(int i=1;i<=n*4+2;i++)
    //{
    //    s3[i]=1000000009;
    //}
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
        update(1,1,n,i,v[i]);
    }
    for(int i=0;i<t;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        if(a==1)
        {
            update(1,1,n,b,c);
        }
        else
        {
            cout<<query(1,1,n,b,c)<<endl;
        }
    }
    return 0;
}