1 条题解

  • 1
    @ 2026-6-13 14:20:07

    线段树

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 1e5 + 5;
    int a[N];
    int seg[N * 4];
    
    void build(int id, int l, int r){
        if(l == r){
            seg[id] = a[l];
            return;
        }
        int mid = (l + r) >> 1;
        build(id<<1, l, mid);
        build(id<<1|1, mid+1, r);
        seg[id] = min(seg[id<<1], seg[id<<1|1]);
    }
    
    int query(int id, int l, int r, int ql, int qr){
        if(ql <= l && r <= qr) return seg[id];
        int mid = (l + r) >> 1;
        int ans = INT_MAX;
    
        if(ql <= mid) ans = min(ans, query(id<<1, l, mid, ql, qr));
        if(qr > mid)  ans = min(ans, query(id<<1|1, mid+1, r, ql, qr));
    
        return ans;
    }
    
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        int n, Q;
        cin >> n >> Q;
    
        for(int i = 0; i < n; i++)
            cin >> a[i];
    
        build(1, 0, n-1);
    
        while(Q--){
            int l, r;
            cin >> l >> r;
            cout << query(1, 0, n-1, l, r) << "\n";
        }
    }
    
    • 1

    信息

    ID
    1139
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    (无)
    递交数
    2
    已通过
    1
    上传者