Cod sursa(job #3286923)

Utilizator Laurentiu_BTarabic Laurentiu Gabriel Laurentiu_B Data 14 martie 2025 20:14:51
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include<bits/stdc++.h>
using namespace std;

int n,m,aint[400001];

int a[100001];

int query(int v, int tl, int tr, int l, int r)
{
    if(l>r)
        return 0;

    if(l==tl&&r==tr)
        return aint[v];

    int tm=(tl+tr)/2;
    return max(query(v*2, tl, tm, l, min(r,tm)),query(v*2+1, tm+1, tr, max(l,tm+1), r));
}

void update(int v, int tl, int tr, int pos, int val)
{

    if(tl==tr)
        aint[v]=val;
    else
    {
        int tm=(tl+tr)/2;

        if(pos<=tm)
            update(v*2,tl,tm,pos,val);
        else
            update(v*2+1,tm+1,tr,pos,val);

        aint[v]=max(aint[v*2],aint[v*2+1]);
    }
}

int main()
{
    ifstream cin("arbint.in");
    ofstream cout("arbint.out");

    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        update(1,1,n,i,a[i]);
    }

    for(int i=1;i<=m;i++)
    {

        int x,y,z;
        cin>>x>>y>>z;
        if(x==0)
            cout<<query(1,1,n,y,z)<<endl;
        else
            update(1,1,n,y,z);
    }
}