Cod sursa(job #2428193)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 4 iunie 2019 12:00:25
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#define MAX 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");

int n,q,Arb[4*MAX];
int poz,val,start,finish,maxim;

void read();
void solve();
void Update(int,int,int);
void Query(int,int,int);

int main(){
    read();
    solve();
    return 0;
}
void Query(int nod, int st, int dr){
    if(start<=st&&finish>=dr){
        maxim=max(maxim,Arb[nod]);
        return;
    }
    int mij=(st+dr)>>1,ans=0;

    if(mij<finish)
        Query(nod*2+1,mij+1,dr);
    if(mij>=start)
        Query(nod*2,st,mij);
}
void Update(int nod, int st,int dr){
    if(st==dr){
        Arb[nod]=val;
        return;
    }
    int mij=(st+dr)>>1;
    if(poz<=mij)
        Update(nod*2,st,mij);
    else
        Update(nod*2+1,mij+1,dr);

    Arb[nod]=max(Arb[nod*2],Arb[nod*2+1]);

}
void solve(){
    bool task;
    int a,b;
    while(q--){
        fin>>task>>a>>b;
        if(task){
            poz=a;
            val=b;
            Update(1,1,n);
        }
        else{
            start=a, finish=b, maxim=0;
            Query(1,1,n);
            fout<<maxim<<'\n';
        }
    }
}
void read(){
    int i;
    fin>>n>>q;
    for(i=1;i<=n;++i){
        fin>>val;
        poz=i;
        Update(1,1,n);
    }
}