segment tree code to find max in a segment

PHOTO EMBED

Thu Aug 07 2025 04:52:37 GMT+0000 (Coordinated Universal Time)

Saved by @piyushpar7 #c++

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    vector<int> segTree;
    vector<int> arr;

    void build(int p, int l, int r) {
        if (l == r) {
            segTree[p] = arr[l];
            return;
        }
        int mid = (l + r) >> 1;
        build(p << 1, l, mid);
        build(p << 1 | 1, mid + 1, r);
        segTree[p] = min(segTree[p << 1], segTree[p << 1 | 1]);
    }

    int query(int p, int l, int r, int ql, int qr) {
        if (qr < l || ql > r) return INT_MAX;
        if (ql <= l && r <= qr) return segTree[p];
        int mid = (l + r) >> 1;
        return min(
            query(p << 1, l, mid, ql, qr),
            query(p << 1 | 1, mid + 1, r, ql, qr)
        );
    }

    void update(int p, int l, int r, int pos, int val) {
        if (l == r) {
            segTree[p] = val;
            return;
        }
        int mid = (l + r) >> 1;
        if (pos <= mid) update(p << 1, l, mid, pos, val);
        else update(p << 1 | 1, mid + 1, r, pos, val);
        segTree[p] = min(segTree[p << 1], segTree[p << 1 | 1]);
    }

    void solve(vector<int>& input) {
        arr = input;
        int n = arr.size();
        segTree.assign(4 * n, 0);
        build(1, 0, n - 1);
    }
};
content_copyCOPY

this will work where we need to find the min in range and we have update also there