Cod sursa(job #1868445)

Utilizator GeorginskyGeorge Georginsky Data 4 februarie 2017 22:24:49
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m, mx, sgt[300000], v[100005];

void update(int l, int r, int node, int p){
    if(l==r){
         sgt[node]=v[l];
         return;
    }
    int m=(l+r)/2;
    if(p<=m)update(l, m, 2*node, p);
    else update(m+1, r, 2*node+1, p);
    sgt[node]=max(sgt[node*2], sgt[node*2+1]);
}

int query(int l, int r, int ql, int qr, int node){
    if(ql<=l&&r<=qr)return sgt[node];
    if(qr<l||ql>r)return -1;
    int m=(l+r)/2;
    return max(query(l, m, ql, qr, node*2), query(m+1, r, ql, qr, node*2+1));
}

int main(){
    in>>n>>m;
    int o, a, b;
    for(int i=1; i<=n; i++)in>>v[i], update(1, n, 1, i);
    for(int i=1; i<=m; i++){
        in>>o>>a>>b;
        if(!o){
            out<<query(1, n, a, b, 1)<<"\n";
        }else{
            v[a]=b;
            update(1, n, 1, a);
        }
    }
    return 0;
}