二维RMQ hdu 2888
题目:点这里
题意:给出一个n*m的矩阵,然后又Q个询问:每个询问有x1,y1,x2,y2,x1,y1为子矩阵的左上角坐标,x2,y2为右上角的坐标。求此子矩阵中元素最大值,判断最大值是否在子矩阵四个角上,在就输出yes,否则输出no。
分析:二维RMQ直接上代码。
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int max_=;
int dp[max_][max_][][];//RMQ的递推数组。1,3维是行,2 4维是列。
int a[max_][max_];
void RMQ_init(int n,int m)
{
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)//初始化
{
dp[i][j][][]=a[i][j];
}
for(int i=;(<<i)<=n;i++)
for(int j=;(<<j)<=m;j++)
if(i||j)//i,j不都为0。
{
for(int ii=;ii+(<<i)-<=n;ii++)
for(int jj=;jj+(<<j)-<=m;jj++)
{
if(i)//对行递推。
{
int k=<<(i-);
dp[ii][jj][i][j]=max(dp[ii][jj][i-][j],dp[ii+k][jj][i-][j]);
}
else
{
int k=<<(j-);
dp[ii][jj][i][j]=max(dp[ii][jj][i][j-],dp[ii][jj+k][i][j-]);
}
}
}
}
int RMQ_Q(int x1,int y1,int x2,int y2)//查询
{
int k1=;
while((<<(k1+))<=x2-x1+)k1++;
int k2=;
while((<<(k2+))<=y2-y1+)k2++;
x2=x2-(<<k1)+;
y2=y2-(<<k2)+;
return max(max(dp[x1][y1][k1][k2],dp[x1][y2][k1][k2]),max(dp[x2][y1][k1][k2],dp[x2][y2][k1][k2]));
}
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{
if(!n&&!m)
break;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&a[i][j]);
}
RMQ_init(n,m);
int k;
scanf("%d",&k);
while(k--)
{
int x1,y1,x2,y2;
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
int temp=RMQ_Q(x1,y1,x2,y2);
printf("%d ",temp);
if(temp==a[x1][y1]||temp==a[x1][y2]||temp==a[x2][y1]||temp==a[x2][y2])
printf("yes\n");
else
printf("no\n");
}
}
}
二维RMQ hdu 2888的更多相关文章
- HDU 2888:Check Corners(二维RMQ)
http://acm.hdu.edu.cn/showproblem.php?pid=2888 题意:给出一个n*m的矩阵,还有q个询问,对于每个询问有一对(x1,y1)和(x2,y2),求这个子矩阵中 ...
- hdu 2888 二维RMQ模板题
Check Corners Time Limit: 2000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 2888 Check Corners (模板题)【二维RMQ】
<题目链接> <转载于 >>> > 题目大意: 给出一个N*M的矩阵,并且给出该矩阵上每个点对应的值,再进行Q次询问,每次询问给出代询问子矩阵的左上顶点和右下 ...
- hdu 2888 二维RMQ
Check Corners Time Limit: 2000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hduacm 2888 ----二维rmq
http://acm.hdu.edu.cn/showproblem.php?pid=2888 模板题 直接用二维rmq 读入数据时比较坑爹 cin 会超时 #include <cstdio& ...
- 【HDOJ 2888】Check Corners(裸二维RMQ)
Problem Description Paul draw a big m*n matrix A last month, whose entries Ai,j are all integer numb ...
- hdu2888 二维RMQ
Check Corners Time Limit: 2000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU2888 Check Corners(二维RMQ)
有一个矩阵,每次查询一个子矩阵,判断这个子矩阵的最大值是不是在这个子矩阵的四个角上 裸的二维RMQ #pragma comment(linker, "/STACK:1677721600&qu ...
- POJ 2019 Cornfields [二维RMQ]
题目传送门 Cornfields Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 7963 Accepted: 3822 ...
随机推荐
- Optparse 简介
optparse 这个库的主要作用是可以用为脚本提供传递命令参数功能 一个简单的例子 def main(): parser = OptionParser(usage = "usage: %p ...
- 41-python基础-python3-字符串-转义字符
转义字符包含一个倒斜杠(\),紧跟着是想要添加到字符串中的字符.(尽管它包含两个字符,但大家公认它是一个转义字符.) 实例1: Python 知道,因为 Bob\'s 中的单引号有一个倒斜杠,所以它不 ...
- 《代码大全2》读书笔记 Week8
这一周博主阅读了<代码大全2>第11章至第13章,第三部分——"变量"就结束了,第四部分作者将转入语句的讨论. 第十一章作者详细阐述了变量名的有效命名规则,第十二和十三 ...
- 出现异常: 非介入式客户端验证规则中的验证类型名称必须唯一。下列验证类型出现重复: required
在将web.config文件中的<add key="ClientValidationEnabled" value="false" /> 设为fals ...
- ASE团队项目alpha阶段Frontend组 scrum2 记录
ASE团队项目alpha阶段Frontend组 scrum2 记录 本次会议于11.5日, 11:30在微软北京西二楼13158研讨室,讨论持续15分钟 与会人员:Jingyi Xie, Jiaqi ...
- Apache Shiro反序列化远程代码执行
一.漏洞利用 wget https://raw.githubusercontent.com/sv3nbeast/ShiroScan/master/moule/ysoserial.jar 反弹shell ...
- 笔记66 Spring Boot快速入门(六)
SpringBoot中使用Mybatis 一.注解方式 1.创建映射文件CategoryMapper.java 使用注解@Mapper 表示这是一个Mybatis Mapper接口.使用@Select ...
- 【Luogu】【关卡2-12】递推与递归二分(2017年10月)
任务说明:递推,层层递进,由基础推向顶层.二分不仅可以用来查找数据,还可以确定最合适的值. P1192 台阶问题 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶 ...
- 【Luogu】【关卡2-7】深度优先搜索(2017年10月)【AK】【题解没写完】
任务说明:搜索可以穷举各种情况.很多题目都可以用搜索完成.就算不能,搜索也是骗分神器. P1219 八皇后 直接dfs.对角线怎么判断:同一条对角线的横纵坐标的和或者差相同. #include < ...
- liunx下在线安装mysql
一:在线安装mysql 1.首先检测一下,mysql之前有没有被安装 命令:rpm -qa | grep mysql 2.删除mysql的命令: rpm -e --nodeps `rpm -qa | ...