Cod sursa(job #3259760)

Utilizator Tudor_CCTudor Cocu Tudor_CC Data 27 noiembrie 2024 19:13:12
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>

using namespace std;

int st[500005];

void up(int node,int from,int to,int pos,int val)
{
    if(from==to)
    {
        st[node]=val;
        return;
    }
    int mid=(from+to)/2;
    if(pos<=mid)
    {
        up(node*2,from,mid,pos,val);
    }
    else
    {
        up(node*2+1,mid+1,to,pos,val);
    }
    st[node]=max(st[node*2],st[node*2+1]);
}

int qry(int node,int from,int to,int ql,int qr)
{
    int smax=0;
    if(ql<=from && to<=qr)
    {
        return st[node];
    }
    int mid=(from+to)/2;
    if(ql<=mid)
    {
        int s=qry(node*2,from,mid,ql,qr);
        smax=max(smax,s);
    }
    if(mid+1<=qr)
    {
        int s=qry(node*2+1,mid+1,to,ql,qr);
        smax=max(smax,s);
    }
    return smax;
}

int main()
{
    ifstream cin("arbint.in");
    ofstream cout("arbint.out");
    int n,q,x,t,a,b;
    cin>>n>>q;
    for(int i=1;i<=n;++i)
    {
        cin>>x;
        up(1,1,n,i,x);
    }
    for(int i=1;i<=q;++i)
    {
        cin>>t>>a>>b;
        if(t==0)
        {
            cout<<qry(1,1,n,a,b)<<"\n";
        }
        else
        {
            up(1,1,n,a,b);
        }
    }
    return 0;
}