Cod sursa(job #3036552)

Utilizator iordacheMatei Iordache iordache Data 24 martie 2023 16:14:18
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;
int ST[100005];
void update(int node,int l, int r, int poz, int val)
{
    if(l==r)
    {
        ST[node]=val;
        return;
    }
    int mid=(l+r)/2;
    if(poz<=mid)
        update(node*2,l,mid,poz,val);
    else
        update(node*2+1,mid+1,r,poz,val);
    ST[node]=max(ST[node*2],ST[node*2+1]);
}

int query(int node, int l, int r, int ql, int qr)
{
    int smax=0;
    if(ql<=l&&r<=qr)
        return ST[node];
    int mid=(l+r)/2;
    if(ql<=mid)
    {
        int s=query(node*2,l,mid,ql,qr);
        smax=max(smax,s);
    }
    if(qr>=mid+1)
    {
        int s=query(node*2+1,mid+1,r,ql,qr);
        smax=max(smax,s);
    }
    return smax;
}
int main()
{
    ifstream cin("arbint.in");
    ofstream cout("arbint.out");
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;++i)
    {
        int a;
        cin>>a;
        update(1,1,n,i,a);
    }
    for(int i=1;i<=m;++i)
    {
        int op,x,y;
        cin>>op>>x>>y;
        if(op==0)
            cout<<query(1,1,n,x,y)<<'\n';
        else
            update(1,1,n,x,y);
    }
}