Cod sursa(job #2594303)

Utilizator GiosinioGeorge Giosan Giosinio Data 5 aprilie 2020 17:44:40
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
#define DIM 100005

using namespace std;

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

int N, M;
int MaxArb[5*DIM], poz, val;
int maxim,a,b;
bool op;

void Update(int nod, int st, int dr){
    if(st == dr)
        MaxArb[nod] = val;
    else{
        int mij = (st + dr)/2;
        if(poz <= mij)
            Update(2*nod, st, mij);
        else
            Update(2*nod+1, mij+1, dr);
        MaxArb[nod] = max(MaxArb[2*nod], MaxArb[2*nod+1]);
    }
}

void Query(int nod, int st, int dr){
    if(a <= st && dr <= b){
        if(maxim < MaxArb[nod])
            maxim = MaxArb[nod];
    }
    else{
        int mij = (st + dr)/2;
        if(mij >= a)
            Query(2*nod, st, mij);
        if(mij < b)
            Query(2*nod+1, mij+1, dr);
    }
}

int main(){
    f>>N>>M;
    for(int i=1; i<=N; i++){
        f>>val; poz=i;
        Update(1,1,N);
    }
    for(int i=1; i<=M; i++){
        f>>op>>a>>b;
        if(op == 0){
            maxim = -1;
            Query(1,1,N);
            g<<maxim<<"\n";
        }
        else{
            poz = a, val = b;
            Update(1,1,N);
        }
    }
}