Cod sursa(job #3259461)

Utilizator amalia_ghicaAmalia Ghica amalia_ghica Data 26 noiembrie 2024 13:11:01
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#define int long long
using namespace std;
int st[400005];
void update(int node, int from, int to, int poz, int val){
    if(from == to){
        st[node] = val;
        return;
    }
    int mid = (from + to) / 2;
    if(poz <= mid){
        update(2 * node, from, mid, poz, val);
    }else{
        update(2 * node + 1, mid + 1, to, poz, val);
    }
    st[node] = max(st[node * 2], st[node * 2 + 1]);
}

int query(int node, int from, int to, int ql, int qr){
    int smin = 0;
    if(ql <= from  &&  to <= qr){
        return st[node];
    }
    int mid = (from + to) / 2;
    if(ql <= mid){
        int s = query(node * 2, from, mid, ql, qr);
        smin = max(smin, s);
    }
    if(mid + 1 <= qr){
        int s = query(node * 2 + 1, mid + 1, to, ql, qr);
        smin = max(smin, s);
    }
    return smin;
}
signed main()
{
    ifstream cin("arbint.in");
    ofstream cout("arbint.out");
    int n, m, ok, x, y, a;
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        cin >> a;
        update(1, 1, n, i, a);
    }
    for(int i = 0; i < m; i++){
        cin >> ok >> x >> y;
        if(ok == 1){
            update(1, 1, n, x, y);
        }else{
            cout << query(1, 1, n, x, y) << "\n";
        }
    }
    return 0;
}