Cod sursa(job #1255554)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 4 noiembrie 2014 22:00:15
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

#define Nmax 100005

int n, m;
int pos, val;
int a, b, maxx;
int tree[3 * Nmax];

void update(int node, int l, int r){
    if (l == r)
       tree[node] = val;
    else{
        int m = (l + r) / 2;
        if (pos <= m)
            update(node * 2, l, m);
        else
            update(node * 2 + 1, m + 1, r);
        tree[node] = max(tree[node * 2], tree[node * 2 + 1]);
    }
}

void query(int node, int l, int r){
    if (a <= l && r <= b)
        maxx = max(maxx, tree[node]);
    else{
        int m = (l + r) / 2;
        if (a <= m)
            query(node * 2, l, m);
        if (m < b)
            query(node * 2 + 1, m + 1, r);
    }
}

void read(){
    scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; ++i){
        scanf("%d", &val);
        pos = i;
        update(1, 1, n);
    }
}

void solve(){
    int op;
    for (int i = 1; i <= m; ++i){
        scanf("%d", &op);
        if (op == 1){
            scanf("%d %d", &pos, &val);
            update(1, 1, n);
        } 
        else{
            scanf("%d %d", &a, &b);
            maxx = -1;
            query(1, 1, n);
            printf("%d\n", maxx);
        }
    }
}

int main(){
    freopen("arbint.in", "r", stdin);
    freopen("arbint.out", "w", stdout);

    read();
    solve();

    return 0;
}