Cod sursa(job #3329040)

Utilizator OrhanZLTOrhan Zlatkov OrhanZLT Data 11 decembrie 2025 16:38:43
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>
#define ll long long
#define F first
#define S second

using namespace std;

const ll MOD=1e9+7;
const string filename="arbint";
ifstream fin(filename+".in");
ofstream fout(filename+".out");

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    ll n,q;
    fin>>n>>q;
    vector<ll> v(n*2,0);
    for(ll i=0;i<n;i++){
        ll x=n+i;
        fin>>v[x];
        x/=2;
        while(x>0){
            v[x]=min(v[x*2],v[x*2+1]);
            x/=2;
        }
    }
    for(ll i=0;i<q;i++){
        ll a,b,c;
        cin>>c>>a>>b;
        if(c==1){
            ll x=a+n-1;
            v[x]=b;
            x/=2;
            while(x>0){
                v[x]=max(v[x*2],v[x*2+1]);
                x/=2;
            }
        }
        else{
            ll pos=a,ans=MOD,x,ch,l=0,lc;
            while(pos<=b){
                ch=1;
                x=pos+n-1;
                l=pos+n-1;
                lc=1;
                while(x%2==0 && pos+ch-1<=b){
                    l=x;
                    lc=ch;
                    x/=2;
                    ch*=2;
                }
                ans=max(ans,v[l]);
                pos=pos+lc;
            }
            fout<<ans<<'\n';
        }
    }
    return 0;
}