Cod sursa(job #2754771)

Utilizator bogdan2405Strat Bogdan-Valentin bogdan2405 Data 26 mai 2021 15:20:11
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.84 kb
#include<bits/stdc++.h>

using namespace std;

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

//vector<int> arbint;
const int N_max= 100000;
int arbint[4*N_max+1];
void arboreInterval(int nod, int stanga, int dreapta, int pozitie, int valoare){
    if(stanga==dreapta){
        arbint[nod]=valoare;
        return;
    }
    else{
        int mijloc;
        mijloc=(stanga+dreapta)/2;
        if(pozitie<=mijloc){
            arboreInterval(nod*2,stanga,mijloc,pozitie,valoare);
        }
        else{
            arboreInterval(nod*2+1,mijloc+1,dreapta,pozitie,valoare);
        }
        arbint[nod]=max(arbint[nod*2],arbint[nod*2+1]);

    }

}

void query(int nod, int stanga, int dreapta, int queryStanga, int queryDreapta,int &ans ){
    if(stanga>queryDreapta || dreapta<queryStanga){
        //return 0;
        return ;
    }
     if(stanga>=queryStanga && dreapta<=queryDreapta){
        //return arbint[nod];
        ans=arbint[nod];
        return;
    }

    int mijloc;
    mijloc=(stanga+dreapta)/2;
    if(queryStanga<=mijloc){
         query(nod*2,stanga,mijloc,queryStanga,queryDreapta,ans);
    }
    if(mijloc<queryDreapta){
         query(nod*2+1,mijloc+1,dreapta,queryStanga,queryDreapta,ans);
    }
}
int main(){
    //arbint.assign(1000001,0);
    vector<int> v;
    int n,m,i,j,valoare,queryStanga,queryDreapta,ans,pozitie;
    bool tip;
    f>>n>>m;
    for(i=0;i<n;++i){
        f>>valoare;
        arboreInterval(1,1,n,i+1,valoare);
        /*for(j=1;j<=4*n+1;++j){
            cout<<arbint[j]<<" ";
        
        }
        cout<<endl;*/
    }
    for(i=0;i<m;++i){
        f>>tip>>queryStanga>>queryDreapta;;
        if(tip==0){
            ans=0;
            query(1,1,n,queryStanga,queryDreapta,ans);
            g<<ans<<'\n';
        }
        else{
            arboreInterval(1,1,n,queryStanga,queryDreapta);
        }
    }
    return 0;
}