POJ 3264 RMQ问题 用dp解决
2024-08-28 10:46:18
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N = ;
#define INF 0x3f3f3f3f
int maxn[N<<][] , minn[N<<][] , a[N]; void build_dp(int n)
{
memset(maxn , , sizeof(maxn));
memset(minn , 0x3f , sizeof(minn));
for(int i= ; i<n ; i++) minn[i][]=maxn[i][]=a[i];
for(int j= ; (<<(j-))<n ; j++){
for(int i= ; i<n ; i++){
minn[i][j] = min(minn[i][j-] , minn[i+(<<(j-))][j-]);
maxn[i][j] = max(maxn[i][j-] , maxn[i+(<<(j-))][j-]);
}
}
} int get_index(int len)
{
int ans= , l=;
while(l<len){
l<<=;
ans++;
}
return ans-;
} int main()
{
// freopen("a.in" , "r" , stdin);
int n , q , s , t;
while(~scanf("%d%d" , &n , &q))
{
for(int i= ; i<n ; i++){
scanf("%d" , &a[i]);
}
build_dp(n);
for(int i= ; i<q ; i++){
scanf("%d%d" , &s , &t);
s-- , t--;
int len=t-s+ , maxVal= , minVal=INF;
if(s == t){
maxVal = maxn[s][];
minVal = minn[s][];
}else{
int k=get_index(len);
maxVal = max(maxn[s][k] , maxn[t-(<<k)+][k]);
minVal = min(minn[s][k] , minn[t-(<<k)+][k]);
}
printf("%d\n" , maxVal-minVal);
}
}
return ;
}
原来也做过这道题,不过今天刚看完RMQ的ST算法,就用dp的方式再写了一遍
原来用线段树来解决这个问题的,但是这里并不需要节点的更新操作,只是询问,所以在这种情况下,是可以用ST算法来解决这个问题的
最新文章
- Xshell显示中文乱码问题
- QML杂记
- hdu 2044:一只小蜜蜂...(水题,斐波那契数列)
- python的hashlib模块
- uva 10706 Number Sequence(数学规律)
- ZOJ Monthly, October 2010 ABEFI
- cocos2d-x 3.x 触摸事件
- 机器学习:python中如何使用朴素贝叶斯算法
- [转载] Java中常用的加密方法
- LCA最近公共祖先(倍增版)
- IntelliJ的Scala配置
- spring boot 入门(一)
- git 创建项目
- openStack 重新resize时会进行重新调度,可能在本机Resize 扩展资源,也可能存在的情况时 ,新扩展的资源在当前节点不足分配,整个虚拟机将进行迁移调度,进行异机迁移时需要迁移 的两台主机间能使用nova系统用户经passless登录
- [DPI][suricata] suricata 配置使用
- git用法-打补丁【转】
- esp8266尝鲜
- MySQL之EXPLAIN 执行计划详解
- 【小程序】返回顶部wx.pageScrollTo和scroll-view的对比
- 如何正确实现 IDisposable 接口
热门文章
- Oracle中的表空间
- Heart Beat
- Android 计算view 的高度
- vba,excel,网址提取名字与链接url
- KMS
- xamarin 学习笔记02- IOS Simulator for windows 安装
- Java多线程编程核心技术---Lock的基本概念和使用
- OracleService類
- AttributeError: &#39;dict&#39; object has no attribute &#39;encode&#39;
- mysql 查看存储过程 并导出