1270. 数列区间最大值
区间 最大值 数列
2023-09-27 14:27:32 时间
Powered by:NEFU AB-IN
文章目录
1270. 数列区间最大值
-
题意
输入一串数字,给你 M 个询问,每次询问就给你两个数字 X,Y,要求你说出 X 到 Y 这段区间内的最大数。
-
思路
线段树求区间最大值
-
代码
超时
''' Author: NEFU AB-IN Date: 2022-03-26 17:50:51 FilePath: \ACM\Acwing\1264.1.py LastEditTime: 2022-03-26 21:03:12 ''' class Node(): def __init__(self, l, r): self.l = l self.r = r self.max = -1 N = int(1e5 + 10) tr = [Node(0, 0) for _ in range(N << 2)] a = [0] * N def pushup(p): tr[p].max = max(tr[p << 1].max, tr[p << 1 | 1].max) def build(p, l, r): tr[p] = Node(l, r) if l == r: tr[p].max = a[l] return mid = l + r >> 1 build(p << 1, l, mid) build(p << 1 | 1, mid + 1, r) pushup(p) def modify(p, k, v): if k <= tr[p].l and tr[p].r <= k: tr[p].max = v return mid = tr[p].l + tr[p].r >> 1 if k <= mid: modify(p << 1, k, v) if k > mid: modify(p << 1 | 1, k, v) pushup(p) def query(p, l, r): ans = -1 if l <= tr[p].l and tr[p].r <= r: return tr[p].max mid = tr[p].l + tr[p].r >> 1 if l <= mid: ans = max(ans, query(p << 1, l, r)) if r > mid: ans = max(ans, query(p << 1 | 1, l, r)) return ans n, m = map(int, input().split()) a[1:] = list(map(int, input().split())) build(1, 1, n) for i in range(m): x, y = map(int, input().split()) print(query(1, x, y))
相关文章
- 【区间DP】XOR-pyramid
- 在OpenCV环境下写的灰度图像二维傅里叶换、幅值计算、频谱平移和将数值归一化到0到255区间的四个函数
- 合并区间 python
- 区间反转问题
- ZOJ - 3469 Food Delivery(区间DP)
- poj2955Brackets(区间DP)
- 【bzoj4897】[Thu Summer Camp2016]成绩单 区间dp
- 【bzoj3379】[Usaco2004 Open]Turning in Homework 交作业 区间dp
- 【bzoj3065】带插入区间K小值 替罪羊树套权值线段树
- 【bzoj4811】[Ynoi2017]由乃的OJ 树链剖分+线段树区间合并
- 【bzoj3526】[Poi2014]Card 线段树区间合并