kb-07-RMQ线段树--07(动态规划)
RMQ是一类解决区间最值查询的算法的通称;、一共有四类;在代码中有说明;
下面是ST算法,就是动态规划做法;
/*
RMQ算法、
RMQ是一个通称,专指区间求最值的算法;
分为:暴力,线段树,动态规划(ST),RMQ标准算法;四种
这一题用普通的线段树也是可以做的,维护区间最大值和区间最小值然后查询区间最值然后做差就行了;
这里用的是动态规划法就是ST;
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,q;
int a[]={},d[][]={},dd[][]={};
void RMQ_inti_min()
{
for(int i=;i<n;i++)
{
d[i][]=a[i];
}
for(int i=;(<<i)<=n;i++)//控制的是第二维;
{
for(int j=;j+(<<i)-<n;j++)
{
d[j][i]=min(d[j][i-],d[j+(<<(i-))][i-]);
}
}
}
void RMQ_inti_max()
{
for(int i=;i<n;i++)
{
dd[i][]=a[i];
}
for(int i=;(<<i)<=n;i++)//控制的是第二维;
{
for(int j=;j+(<<i)-<n;j++)
{
dd[j][i]=max(dd[j][i-],dd[j+(<<(i-))][i-]);
}
}
}
int RMQ_min(int l,int r)
{
int k=;
while((<<(k+))<=r-l+)
k++;
return min(d[l][k],d[r-(<<k)+][k]);
}
int RMQ_max(int l,int r)
{
int k=;
while((<<(k+))<=r-l+)
k++;
return max(dd[l][k],dd[r-(<<k)+][k]);
}
int main()
{
while(scanf("%d%d",&n,&q)!=EOF)
{
memset(a,,sizeof(a));
memset(d,,sizeof(d));
memset(dd,,sizeof(dd));
for(int i=;i<n;i++)
{
scanf("%d",&a[i]);
}
RMQ_inti_min();
RMQ_inti_max();
for(int i=;i<q;i++)
{
int l,r;
scanf("%d%d",&l,&r);
int max=RMQ_max(l-,r-);
int min=RMQ_min(l-,r-);
printf("%d\n",max-min);
}
}
return ;
}
kb-07-RMQ线段树--07(动态规划)的更多相关文章
- NBU 2475 Survivors(RMQ线段树)
NBU 2475Survivors 题目链接:http://acm.nbu.edu.cn/v1.0/Problems/Problem.php?pid=2475 题意:给定n个人,每个人有strengt ...
- 【agc023E】Inversions(线段树,动态规划)
[agc023E]Inversions(线段树,动态规划) 题面 AT 给定\(a_i\),求所有满足\(p_i\le a_i\)的排列\(p\)的逆序对数之和. 题解 首先如何计算排列\(p\)的个 ...
- ACM学习历程—HDU5696 区间的价值(分治 && RMQ && 线段树 && 动态规划)
http://acm.hdu.edu.cn/showproblem.php?pid=5696 这是这次百度之星初赛2B的第一题,但是由于正好打省赛,于是便错过了.加上2A的时候差了一题,当时有思路,但 ...
- UESTC 764 失落的圣诞节 --RMQ/线段树
题意:n种物品,每种物品对不同的人都有不同的价值,有三个人选,第一个为普通学生,第二个是集,第三个是祈,集和祈可以选一样的,并且还会获得加分,集和祈选的普通学生都不能选,问三个人怎样选才能使总分最高. ...
- [RMQ] [线段树] POJ 3368 Frequent Values
一句话,多次查询区间的众数的次数 注意多组数据!!!! RMQ方法: 预处理 i 及其之前相同的数的个数 再倒着预处理出 i 到不是与 a[i] 相等的位置之前的一个位置, 查询时分成相同的一段和不同 ...
- VJ16216/RMQ/线段树单点更新
题目链接 /* 单点更新,用RMQ维护最大值,add对c[i]修改,或加,或减. 求[l,r]的和,用sum(r)-sum(l-1).即可. */ #include<cmath> #inc ...
- 51Nod.1766.树上最远点对(树的直径 RMQ 线段树/ST表)
题目链接 \(Description\) 给定一棵树.每次询问给定\(a\sim b,c\sim d\)两个下标区间,从这两个区间中各取一个点,使得这两个点距离最远.输出最远距离. \(n,q\leq ...
- lca 欧拉序+rmq(st) 欧拉序+rmq(线段树) 离线dfs 倍增
https://www.luogu.org/problemnew/show/P3379 1.欧拉序+rmq(st) /* 在这里,对于一个数,选择最左边的 选择任意一个都可以,[left_index, ...
- poj2763(lca / RMQ + 线段树)
题目链接: http://poj.org/problem?id=2763 题意: 第一行输入 n, q, s 分别为树的顶点个数, 询问/修改个数, 初始位置. 接下来 n - 1 行形如 x, y, ...
随机推荐
- ansys-表格
转自http://blog.sina.com.cn/s/blog_833dee820102xwb3.html ANSYS中表格数组的定义及使用举例 ANSYS中会有许多的参数数据,这些参数的形成后要放 ...
- Kunernetes集群架构与组件
架构如图: master节点:主要是集群控制面板的功能,来管理整个集群,包括全局的角色,调度,都是在master节点进行控制 有三个组件: API Server: 是 k8s提供的一个统一入口,它是 ...
- Mac OS X El Capitan系统完整性保护System Integrity Protection (SIP)
http://blog.csdn.net/yulimin/article/details/49992031 引言:前段时间经历了XCode编译器代码被注入的事件后,这次 Mac OS X El Cap ...
- 标签input的value属性和placeholderde 区别
placeholder 顾名思义是一个占位符 在你的value为空的时候他才会显示出来,但是他本身并不是value,也不会被表单提交.
- 2_分布式计算框架MapReduce
一.mr介绍 1.MapReduce设计理念是移动计算而不是移动数据,就是把分析计算的程序,分别拷贝一份到不同的机器上,而不是移动数据. 2.计算框架有很多,不是谁替换谁的问题,是谁更适合的问题.mr ...
- iOS应用架构谈part4-本地持久化方案及动态部署
前言 嗯,你们要的大招.跟着这篇文章一起也发布了CTPersistance和CTJSBridge这两个库,希望大家在实际使用的时候如果遇到问题,就给我提issue或者PR或者评论区.每一个issue和 ...
- 01 Web框架介绍
一.Web框架本质 所有的web应用程序本质上都是socket,用户的浏览器其实就是一个socket客户端. python中常用的web框架有: Django Flask web.py WSGI(we ...
- october安装过程
下载代码 composer create-project october/october myoctober 准备好数据库, create database october; 配置环境于安装 php ...
- GoogleTest 之路2-Googletest 入门(Primer)
Why googletest? 为啥要用GoogleTest呢? googletest 是由测试技术Team 开发的带有google 特殊的需求和限制的测试框架. 不管你在什么平台上写C++代码,go ...
- 第二课:PHP 安装
PHP 安装 您需要做什么? 为了开始使用 PHP,您可以: 找一个支持 PHP 和 MySQL 的 Web 主机 在您自己的 PC 机上安装 Web 服务器,然后安装 PHP 和 MySQL 使用支 ...