1 条题解
-
1
线段树
#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"; } }
信息
- ID
- 1139
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 2
- 已通过
- 1
- 上传者