Cod sursa(job #3297791)

Utilizator ioanmh21Buzdugan Ioan-Michael ioanmh21 Data 23 mai 2025 19:50:28
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");

void update(int pos_upd,int val,vector<int> &aint,int pos_aint,int st,int dr){
    if(st==dr){
        aint[pos_aint]=val;
    }
    else{
        int mij=(st+dr)>>1;

        if(mij>=pos_upd)
            update(pos_upd,val,aint,2*pos_aint,st,mij);
        else
            update(pos_upd,val,aint,2*pos_aint+1,mij+1,dr);

        aint[pos_aint]=max(aint[pos_aint*2],aint[pos_aint*2+1]);
    }
}
//11 22

int query(int st_q,int dr_q,vector<int>& aint,int pos_aint,int st,int dr){
//    cout << pos_aint << ": "<< st << " " << dr <<"\n";
    if(st_q<=st and dr_q>=dr){
        return aint[pos_aint];
    }
    int mij=(st+dr)>>1;

 if( !( dr_q < st or dr < st_q ) )
  {

        if( st==dr )
            return aint[pos_aint];

        int ans=-1;
if( st_q<=mij )
        ans=query(st_q,dr_q,aint,pos_aint*2,st,mij);
if( mij<dr_q )
        ans=max(ans,query(st_q,dr_q,aint,pos_aint*2+1,mij+1,dr));
        return ans;

    }
    return -INT_MAX;
}

int main()
{

    int N,M;
    f>>N>>M;
    vector <int> v(N+11), aint(4*N+11);
    for(int i=1;i<=N;i++){
        f>>v[i];
        update(i,v[i],aint,1,1,N);
    }

//    for(auto x:aint)
//        cout << x << " ";
//    cout << query(1,1,aint,1,1,N);
//
//    return 0;




    for(int i=1;i<=M;i++){
        int tip,a,b;
        f>>tip>>a>>b;
        if(tip==1){
            update(a,b,aint,1,1,N);

        }
        else if(tip==0){
            int aux=query(a,b,aint,1,1,N);
            g<<aux<<'\n';
        }
    }
    return 0;
}