- 数列区间最大值
-TJ
- 2024-2-1 15:49:10 @
/* created by chjshen, date: 2024-02-01 15:29 */
#include <cstdio>
#include <iostream>
using namespace std;
#define int long long
const int N = 1e5 + 5;
const int INF = 1E18;
int n, m, a[N];
struct SegmentTree
{
int l, r;
int mx;
} t[N << 2];
void build(int fa, int L, int R) // 建立树
{
t[fa].l = L, t[fa].r = R; // fa 当前结点, L = , R=
if (L == R) // 叶结点
{
t[fa].mx = a[L];
return; // 递归的终止条件
}
int mid = (L + R) >> 1;
build(fa << 1, L, mid); // 建立左儿子的子树
build(fa << 1 | 1, mid + 1, R); // 右儿子
t[fa].mx = max(t[fa << 1].mx, t[fa << 1 | 1].mx);
}
int query(int fa, int l, int r)
{
if (l <= t[fa].l && t[fa].r <= r)
{
return t[fa].mx;
}
int mid = (t[fa].l + t[fa].r) >> 1;
int ans = -INF;
if (l <= mid) ans = max(ans, query(fa << 1, l, r));
if (mid < r) ans = max(ans, query(fa << 1 | 1, l, r));
return ans;
}
void handle(void)
{
while (m--)
{
int x, y;
cin >> x >> y;
cout << query(1, x, y) << endl;
}
}
void initInput(void)
{
ios::sync_with_stdio(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
build(1, 1, n);
}
signed main(void)
{
initInput();
handle();
return 0;
}
4 条评论
-
yl001 LV 9 @ 2024-2-1 15:58:39
zp
-
2024-2-1 15:58:21@
qhp
-
2024-2-1 15:52:47@
hp
-
2024-2-1 15:49:30@
qp
- 1
信息
- ID
- 1720
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 468
- 已通过
- 44
- 上传者