# 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`