Cod sursa(job #3366515)

Utilizator medeeavasile56@gmail.comVasile Medeea [email protected] Data 2 octombrie 2026 11:33:57
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,n_nou,queries;
vector<int> aint,sol;

int actualizare_n(int n)
{
    while(n&(n-1)){
        n+=n&-n;
    } return n;
}

void set(int pos,int val)
{
    pos+=n_nou; aint[pos]=val;
    for(pos/=2;pos;pos/=2) aint[pos]=max(aint[2*pos],aint[2*pos+1]);
}

int answer_queries(int l,int r)
{
    int maxi=-1;
    l+=n_nou; r+=n_nou;
    while(l<=r){
        if(l&1){
            maxi=max(maxi,aint[l]);
            l++;
        }
        if(!(r&1)){
            maxi=max(maxi,aint[r]);
            r--;
        }
        l>>=1;
        r>>=1;
    } return maxi;
}

int main()
{
    cin>>n>>queries;
    n_nou=actualizare_n(n);

    aint.resize(2*n_nou,-1);

    for(int i=0;i<n;i++){
        int value; cin>>value;
        set(i,value);
    }

    for(int i=0;i<queries;i++){
        int op; cin>>op;
        int x,y; cin>>x>>y;
        if(op==1){
            set(x-1,y); continue;
        }
        sol.push_back(answer_queries(x-1,y-1));
    }
    for(auto x:sol) cout<<x<<'\n';
    return 0;
}