Cod sursa(job #3308997)

Utilizator alesiodemiriAlesio Demiri alesiodemiri Data 30 august 2025 18:39:02
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.1 kb
#include <iostream>
#include <queue>
#include <algorithm>
#include <set>
#include <map>
#include <stack>
#include <vector>
#include <string>
#include <deque>
#include <unordered_map>
#include <unordered_set>
#include <cmath>
#include <iomanip>

using namespace std;

#define ll long long

const int INF = -1e9;
int n, m;
vector<int> values;

struct SegmentTree{
    int n; // number of Nodes
    int size; // smaller power of 2
    vector<int> seg;

    SegmentTree(vector<int>& arr){
        n = arr.size();
        size = 1;
        while (size < n) size<<=1;

        seg.assign(2*size, INF);

        // leaves
        for (int i = 0; i < n; i++) seg[size + i] = arr[i];

        // build recursively
        for (int i = size - 1; i > 0; i--)
            seg[i] = max(seg[2*i], seg[2*i + 1]); 
    }

    int query(int node, int left, int right, int a, int b){
        if (right < a || b < left) return INF;
        if (a <= left && b >= right) return seg[node];
        
        int mid = left + (right - left)/2;

        return max(query(node*2, left, mid, a, b), query(node*2+1, mid +1, right, a , b));
    }

    void update(int index, int value){
        index+= size;
        seg[index] = value;
        for (index/=2 ; index >= 1; index/=2)
            seg[index] = max(seg[index*2], seg[index*2+1]);
        
    }
};

void ReadData() {
    cin >> n >> m;
    int val = 0;
    for (int i = 0; i < n; i++){
        cin >> val;
        values.push_back(val);
    }
    
    SegmentTree segTree(values);

    int inst, a, b;
    for (int i = 0; i < m; i++){
        cin >> inst >> a >> b;
        a--; b--;
        if (inst == 0){
            cout << segTree.query(1, 0, segTree.size-1, a, b) << " ";
        } else {
            segTree.update(a, b);
        }
        
    }
    
}

void Solve() {
    // TODO: Implement problem solution here
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

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

    int t = 1;
    // cin >> t; // Uncomment for multiple test cases
    while (t--) {
        ReadData();
        Solve();   
    }
    return 0;
}