Cod sursa(job #2571154)

Utilizator CandyBucherGaube Robert Gabriel CandyBucher Data 4 martie 2020 21:17:19
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include<iostream>
#include<fstream>
#define N 500000
using namespace std;

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

int poz,val,arb[N],n,m,a,b,vmax;

void update(int nod,int st,int dr){
    if(st==dr){
        arb[nod]=val;
        return;
    }
    int mij=(st+dr)/2;
    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 query(int nod,int st,int dr){
    if(a<=st&&dr<=b){
        vmax=max(vmax,arb[nod]);
        return;
    }
    int mij=(st+dr)/2;
    if(a<=mij) query(nod*2,st,mij);
    if(mij<b) query(nod*2+1,mij+1,dr);
}
int main(){
    f>>n>>m; int i,x;
    for(i=1;i<=n;i++){
        f>>val;
        poz=i;
        update(1,1,n);
    }
    for(i=1;i<=m;i++){
        f>>x>>a>>b;
        if(x==0){
            vmax=-1;
            query(1,1,n);
            o<<vmax<<'\n';
        }
        else{
            poz=a; val=b;
            update(1,1,n);
        }
    }
    o.close();
    f.close();
}