Cod sursa(job #3338593)

Utilizator Andrada_MincaAndrada Minca Andrada_Minca Data 4 februarie 2026 10:26:06
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
//
//  main.cpp
//  Aint cu batog
//
//  Created by Andrada Minca on 20.01.2026.
//

#include <fstream>
#include <vector>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
const int B=300;
vector<int>v(100000),bucket(100000/B);
/*void check(int start)
{
    bucket[start]=0;
    bb[start]=0;
    for(int i=start*B;i<=(start+1)*B;i++)bucket[start]=max(bucket[start],v[i]);
}*/
int get_bucket(int a)
{
    return a/B;
}
int get_b_start(int a)
{
    return a/B*B;
}
int get_b_end(int a)
{
    return (a/B+1)*B-1;
}
void calc_max(int a,int b)
{
    int ans=0;
    for(int i=a/B+1;i<b/B;i++)
    {
        ans=max(ans,bucket[i]);
    }
    for(int i=a;i<=min(get_b_end(a),b);i++)
    {
        if(v[i]>ans)ans=v[i];
    }
    for(int i=max(get_b_start(b),a);i<=b;i++)
    {
        if(v[i]>ans)ans=v[i];
    }
    cout<<ans<<'\n';
}
void schimba(int a,int b)
{
    v[a]=b;
    int start=get_bucket(a);
    bucket[start]=0;
    for(int i=get_b_start(a);i<=get_b_end(a);i++)bucket[start]=max(bucket[start],v[i]);
}
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        cin>>v[i];
        bucket[i/B]=max(bucket[i/B],v[i]);
    }
    for(int i=0;i<m;i++)
    {
        int c,a,b;
        cin>>c>>a>>b;
        a--;
        b--;
        if(c==0)
        {
            calc_max(a,b);
        }
        else
        {
            schimba(a,b+1);
        }
    }
    return EXIT_SUCCESS;
}