Cod sursa(job #3323836)

Utilizator andrei1232008nicolae andrei andrei1232008 Data 19 noiembrie 2025 23:43:45
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int lim=1e5+10;
int n,q,x,i,s[lim],t,y;
void create(int x,int val)
{
    int k=x+n;
    s[k]=val;
    while(k)
    {
        s[k]=max(s[k],val);
        k/=2;
    }
}

void update(int x,int val)
{
    x+=n;
    s[x]=val;
    x/=2;
    while(x)
    {
        s[x]=max(s[2*x],s[2*x+1]);
        x/=2;
    }
}
int query(int l,int r)
{
    l+=n;
    r+=n;
    int mx=0;
    while(l<=r)
    {
        if(l%2==1)mx=max(mx,s[l]);
        l=(l+1)/2;
        if(r%2==0)mx=max(mx,s[r]);
        r=(r-1)/2;
    }
    return mx;
}

void task()
{
    fin>>t>>x>>y;
    if(t==0)fout<<query(x-1,y-1)<<'\n';
    else
        update(x-1,y);
}
int main()
{
    fin>>n>>q;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        create(i-1,x);
    }
    while(q--)
    {
        task();
    }
    return 0;
}