AcWing 1270. 数列区间最大值(RMQ问题)
题目链接
https://www.acwing.com/problem/content/description/1272/
思路
我们这次需要维护一下区间的最大值,也就是经典的 RMQ
问题,由于没有更新操作,所以只写了 build
和 query
部分,原理都非常简单,相当于是模板了 ,详情请看代码
代码
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;#define endl "\n"
#define ll long long
#define INF 0x3f3f3f3f3f3f3f3fconst int N = 2e5+10;ll a[N];struct Tnode{ll l,r,sum,lazy,Max;
};struct SegmentTree{Tnode tree[N<<2];inline void push_up(ll root){//向上更新tree[root].Max = max(tree[root<<1].Max , tree[(root<<1) | 1].Max);}void build(ll l,ll r,ll root){//建树tree[root].l = l;tree[root].r = r;if(l == r) tree[root].Max = a[l];else{ll mid = ((r+l) >> 1);build(l,mid,root<<1);build(mid+1,r,(root<<1)+1);push_up(root);}}ll query(ll l,ll r,ll root) {//区间查询if(tree[root].l >= l && tree[root].r <= r) return tree[root].Max;else{ll mid = tree[root].l + ((tree[root].r-tree[root].l) >> 1);ll ans = -INF;if(l <= mid) ans = max(ans,query(l,r,root<<1));//如果我们查询区间的左边界比当前节点的中间点小,那么说明查询区间要往左走if(r > mid) ans = max(ans,query(l,r,(root<<1) + 1));//如果我们查询的右边界要比当前节点的中间节点大,那么说明查询区间要往右走return ans;}}
}Tree;int n,m;int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;for(int i = 1;i <= n; ++i) cin>>a[i];Tree.build(1,n,1);ll l,r;for(int t = 1;t <= m; ++t){cin>>l>>r;cout<<Tree.query(l,r,1)<<endl;}
}
/*Testcase:
input10 2
3 2 4 5 6 8 1 2 9 7
1 4
3 8output:5
8*/
AcWing 1270. 数列区间最大值(RMQ问题)相关推荐
- 线段树求区间最大值RMQ(单点更新)
题目:HDU1754 #include <stdio.h> #define maxn 222222 #define lson l,m,rt<<1 #define rson m+ ...
- 线段树维护区间最大值+第 45 届(ICPC)亚洲区域赛(昆明)L题Simone and Graph Coloring
题意: 给你n个数的序列,当满足i<ji<ji<j andandand ai>aja_i>a_jai>aj时,这两个点之间有一条边,现在对点染色,要求每个点相邻 ...
- 【HDU - 1754】I Hate It (线段树模板 单点覆盖更新+区间最大值查询)
题干: 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当 ...
- 【RMQ问题】求数组区间最大值,NYOJ-1185-最大最小值
转自:http://blog.csdn.net/lilongherolilong/article/details/6624390 先挖好坑,明天该去郑轻找虐 RMQ(Range Minimum/Max ...
- 求数组所有区间最大值减去最小值之差的和(贝壳笔试题)
这个题直接暴力求解的话时间复杂度肯定是不行的,所以,我们要计算每个数值的贡献,对每一个数求他当最小值当了多少次,当最大值当了多少次,最后当最大值的次数乘以这个数值减去当最小值的次数乘以数值就得到这个数 ...
- 【BZOJ3956】Count,单调栈+ST表维护区间最大值
Time:2016.08.11 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: TA爷眼中的水题 首先有个特别的结论 总共的点对数不会超过2n 因为对于元素i来说,如果只考虑与比它高 ...
- 文远知行杯广东工业大学第十六届 A题 区间最大值
给出位置区间,求区间内最大值. 已知:y 是 关于 位置x 的函数 问题:求位置区间内的最大值, 算法1 算出区间内每个位置x对应的函数值y 算法2 找到函数的"单调性" 我们发现 ...
- NYOJ-备用2344 盖伦的告白(线段树,区间最大值)
题目: 2344: 盖伦的告白 时间限制: 1 秒 内存限制: 128 MB 提交: 57 解决: 20 提交 状态 题目描述 盖伦和赵信这对基友又在打赌,谁输了就去向卡特琳娜告白.. 这一 ...
- bzoj4553 [Tjoi2016Heoi2016]序列 树状数组(区间最大值)+cqd
[Tjoi2016&Heoi2016]序列 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1006 Solved: 464 [Submit ...
最新文章
- 放心,GPT-3不会“杀死”编程
- linux swap 交换空间 设置多大合适
- wangEditor的使用及上传图片(一)
- BeanFactory笔记
- Xshell 6 提示 要继续使用此程序,您必须应用最新的更新
- Mysql取得分组的前n名
- Lowest Common Multiple Plus ——ACM
- oracle中dbms_如何在DBMS中找到关系的最高范式?
- Python注释和声明
- Kubernetes Scheduler Deep Dive
- 三阶魔方大中小魔公式_三阶魔方花样玩法,公式汇总
- 06_XML的写入_dom4j添加、删除、修改Xml文件内容
- 微信小程序-JavaScript 3DES对称加密算法加密使用
- 破解excel vba程序
- 中心极限定理-通俗理解
- Chrome调试骚操作
- 7-2 换硬币 (20分)
- Unity开发VR——结合VRTK(二)
- spring项目如何升级mysql包_SpringBoot项目版本升级:从1.5.3升级到2.1.8版本
- CY68013 FPGA通信联调总结
热门文章
- python plt 绘制直方图概率密度和不为1
- python 读取并显示图片,用plt 同时显示多幅图像
- Linux 查看进程之PS命令
- 升级 phpstud y中的 mysql 版本
- C++11 Intro - Thread Id
- 针对piix4_smbus ****host smbus controller not enabled的解决方法
- .NET框架怎样解决DLL Hell问题?
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡
- centos7搭建CDH
- 美团打车低至1分,前三月司机零抽成,快车市场将再起波澜