Cod sursa(job #3032650)

Utilizator CarenaMironov Cezar Luca Carena Data 22 martie 2023 16:05:38
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>

using namespace std;

ifstream cin("arbint.in");
ofstream cout("arbint.out");
int const NMAX=100005;
int segt[4*NMAX];

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

int query(int node, int st, int dr, int ql, int qr)
{
    int maxs=0;
    if(ql<=st && dr<=qr)
        return segt[node];
    int mid=(st+dr)/2;
    if(ql<=mid)
    {
        int s=query(node*2, st, mid, ql, qr);
        maxs=max(maxs, s);
    }
    if(mid+1<=qr)
    {
        int s=query(node*2+1, mid+1, dr, ql, qr);
        maxs=max(maxs, s);
    }
    return maxs;
}

main()
{
    int n, m, i, x, a, b;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        cin>>x;
        update(1, 1, n, i, x);
    }
    for(i=1;i<=m;i++)
    {
        cin>>x>>a>>b;
        if(x==0)
            cout<<query(1, 1, n, a, b)<<'\n';
        else
            update(1, 1, n, a, b);
    }
    return 0;
}