# ZeroJudge d539. 區間 MAX [d539. 區間 MAX (題目連結)](https://zerojudge.tw/ShowProblem?problemid=d539) **線段樹做法** <font color="#00CE17">**AC**</font> **(0.3s, 12.1MB)** ```cpp= #include <bits/stdc++.h> #define int long long using namespace std; const int N = 5e5 + 5; int a[N], seg[N<<2]; int n; void build(int l, int r, int v){ if(l == r){ seg[v] = a[l]; return; } int m = (l + r) >> 1; build(l, m, v<<1); build(m+1, r, (v<<1)+1); seg[v] = max(seg[v<<1], seg[(v<<1)+1]); } int query(int ql, int qr, int l = 0, int r = n-1, int v = 1){ if(ql > r || qr < l) return 0; if(ql <= l && qr >= r) return seg[v]; int m = (l + r) >> 1; if(qr <= m) return query(ql, qr, l, m, v<<1); else if(ql > m) return query(ql, qr, m+1, r, (v<<1)+1); return max(query(ql, m, l, m, v<<1), query(m+1, qr, m+1, r, (v<<1)+1)); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=0; i<n; i++) cin>>a[i]; build(0, n-1, 1); int m; cin>>m; while(m--){ int a, b; cin>>a>>b; if(a > b) swap(a, b); a--, b--; cout<<query(a, b)<<'\n'; } return 0; } ``` ###### 闕以諾 2022/7/6 ###### tags: `C++` `ZeroJudge`