POJ 3264 RMQ裸题
题意:n个数,问a[i]与a[j]间最大值与最小值之差。
总结:看了博客,记下了模板,但有些地方还是不太理解。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<bitset>
#include<vector>
#include<set>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define F(i,a,b) for (int i=a;i<b;i++)
#define FF(i,a,b) for (int i=a;i<=b;i++)
#define mes(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define INF 0x3f3f3f3f
#define inf 0x3f3f3f3f3f3f3f3fll
typedef long long ll;
const int N = 1e5+; int fmaxn[N][],fminn[N][]; //fmaxn[i][j]表示从第i个数起连续2^j个数中的最大值。(DP的状态)
void RMQ(int num) //预处理->O(nlogn)
{
for(int j=; j<; ++j)
for(int i=; i<=num; ++i)
if(i+(<<j)- <= num)
{
fmaxn[i][j]=max(fmaxn[i][j-], fmaxn[i+(<<(j-))][j-]); //dp推出来的
fminn[i][j]=min(fminn[i][j-], fminn[i+(<<(j-))][j-]);
}
} int main()
{
int h,n,m;
scanf("%d%d", &n,&m);
FF(i,,n) {
scanf("%d", &h);
fmaxn[i][]=fminn[i][]=h;
}
RMQ(n);
int l,r;
FF(i,,m) {
scanf("%d%d", &l,&r);
//查询
int lg=floor(log10(double(r-l+)) / log10(double()));
//也是推出来的,得出的lg要使F[i][lg]覆盖区域(l,r),并且lg要最小。最后得到maxn,minn如下
int maxn=max(fmaxn[l][lg], fmaxn[r-(<<lg)+][lg]);
int minn=min(fminn[l][lg], fminn[r-(<<lg)+][lg]); printf("%d\n", maxn-minn);
} return ;
}
POJ 3264 RMQ裸题的更多相关文章
- poj 3264 RMQ 水题
题意:找到一段数字里最大值和最小值的差 水题 #include<cstdio> #include<iostream> #include<algorithm> #in ...
- POJ 3264 RMQ水题
题目大意就是有很多牛.告诉你每只牛的高度.然后有很多个询问.输出该区间内的最大身高差.也就是用RMQ求最大值最小值.貌似还可以用线段树.然而,我还不会线段树.....T_T 可能是太多组数据了.cin ...
- poj 3264 Balanced Lineup(RMQ裸题)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 43168 Accepted: 20276 ...
- POJ 1330 LCA裸题~
POJ 1330 Description A rooted tree is a well-known data structure in computer science and engineerin ...
- poj 3264 RMQ
直接写个RMQ就能过. #include<iostream> #include<cstdio> #include<cstring> #include<algo ...
- poj 3264(RMQ或者线段树)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 42929 Accepted: 20184 ...
- POJ 3264 RMQ问题 用dp解决
#include <cstdio> #include <cstring> #include <iostream> using namespace std; ; #d ...
- poj2019 二维RMQ裸题
Cornfields Time Limit: 1000MS Memory Limit: 30000K Total Submissions:8623 Accepted: 4100 Descrip ...
- POJ 3264:Balanced Lineup(RMQ模板题)
http://poj.org/problem?id=3264 题意:给出n个数,还有q个询问,询问[l,r]区间里面最大值和最小值的差值. 思路:RMQ模板题,开两个数组维护最大值和最小值就行. #i ...
随机推荐
- YUI Compressor压缩失效的场景-eval和with
一.官方文档的说明 in the face of evil features such as eval or with, the YUI Compressor takes a defensive ap ...
- OO的五大原则:SRP、OCP、LSP、DIP、ISP
OO的五大原则是指SRP.OCP.LSP.DIP.ISP. SRP -- (Single Responsibility Principle 单一职责原则) OCP--开闭原则(Closed for M ...
- HttpURLConnection传JSON数据
try { //创建连接 URL url = new URL(url); HttpURLConnection connection = (HttpURLConnection) url.openConn ...
- java 执行redis的部分方法
@Autowired private RedisTemplate<String, Object> redisTemplate; public void setRedisTemplate(R ...
- C++的第一天
第一次写博客,第一天的C++,从第一讲视屏中了解到了,类,对象,oop编程思想 1.类包括对象和对象的行为,对象具有静态连接(对象的名字)和动态链接(对象的行为),视屏中提到了多态性,应该是不同的类具 ...
- Redis 使用 Eval 多个键值自增操作示例
在PHP上使用Redis 给多个键值进行自增,示例如下: $set['money'] = $this->redis->hIncrByFloat($key, $hour .'_money', ...
- Java错误提示is not an enclosing class
今天脑袋晕乎乎的,犯了个低级错误,好半天才反应过来 一直提示:is not an enclosing class 我居然把 RegisterActivity.class 写成了 RegisterAct ...
- 真的了解JS么?
1.setTimeout setTimeout(function(){ }),1000) setTimeout(function(num){ alert(num) //弹123 },1000,1 ...
- [河南省ACM省赛-第三届] 网络的可靠性 (nyoj 170)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=170 根据题意,需要找到度数为1的结点个数,如下图: #include<iostre ...
- ECOS-Ecstore证书生产失效问题排查
无法生成证书问题排查 无法生成证书问题排查 author :James,jimingsong@vip.qq.com since :2015-03-02 名称解释(官方) 常见错误 1. 名称解释(官方 ...