HDU_2888_Check Corners
Check Corners
Time Limit: 2000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3247 Accepted Submission(s): 1173
For each test case, the first line contains two integers m, n (1 <= m, n <= 300), which is the size of the row and column of the matrix, respectively. The next m lines with n integers each gives the elements of the matrix which fit in non-negative 32-bit integer.
The next line contains a single integer Q (1 <= Q <= 1,000,000), the number of queries. The next Q lines give one query on each line, with four integers r1, c1, r2, c2 (1 <= r1 <= r2 <= m, 1 <= c1 <= c2 <= n), which are the indices of the upper-left corner and lower-right corner of the sub-matrix in question.
4 4 10 7
2 13 9 11
5 7 8 20
13 20 8 2
4
1 1 4 4
1 1 3 3
1 3 3 4
1 1 1 1
13 no
20 yes
4 yes
- 二维区间max,打二维ST表
- dp[i][j][e][f]表明从矩阵左上角(i,j)开始宽度范围是2^e,高度范围是2^f的矩形
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
typedef long long LL ;
typedef unsigned long long ULL ;
const int maxn = 1e5 + ;
const int inf = 0x3f3f3f3f ;
const int npos = - ;
const int mod = 1e9 + ;
const int mxx = + ;
const double eps = 1e- ;
const double PI = acos(-1.0) ; int max4(int a, int b, int c, int d){
return max(max(a,b),max(c,d));
}
int m, n, fac[], dp[][][][];
int X1, Y1, X2, Y2, ans, mx, q;
int main(){
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
for(int i=;i<;i++)
fac[i]=(<<i);
while(~scanf("%d %d",&m,&n)){
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
scanf("%d",&dp[i][j][][]);
int rk=(int)(log((double)m)/log(2.0));
int ck=(int)(log((double)n)/log(2.0));
for(int e=;e<=rk;e++)
for(int f=;f<=ck;f++)
if(e || f)
for(int i=;i+fac[e]-<=m;i++)
for(int j=;j+fac[f]-<=n;j++)
if(!e)
dp[i][j][e][f]=max(dp[i][j][e][f-],dp[i][j+fac[f-]][e][f-]);
else if(!f)
dp[i][j][e][f]=max(dp[i][j][e-][f],dp[i+fac[e-]][j][e-][f]);
else
dp[i][j][e][f]=max4(dp[i][j][e-][f-],dp[i+fac[e-]][j][e-][f-],dp[i][j+fac[f-]][e-][f-],dp[i+fac[e-]][j+fac[f-]][e-][f-]);
scanf("%d",&q);
while(q--){
ans=;
scanf("%d %d %d %d",&X1,&Y1,&X2,&Y2);
rk=(int)(log((double)(X2-X1+))/log(2.0));
ck=(int)(log((double)(Y2-Y1+))/log(2.0));
mx=max4(dp[X1][Y1][rk][ck],dp[X2-fac[rk]+][Y1][rk][ck],dp[X1][Y2-fac[ck]+][rk][ck],dp[X2-fac[rk]+][Y2-fac[ck]+][rk][ck]);
if(mx==dp[X1][Y1][][]||
mx==dp[X1][Y2][][]||
mx==dp[X2][Y1][][]||
mx==dp[X2][Y2][][]){
ans=;
}
printf("%d %s\n",mx,ans?"yes":"no");
}
}
return ;
}
HDU_2888_Check Corners的更多相关文章
- CSS3 笔记一(Rounded Corners/Border Images/Backgrounds)
CSS3 Rounded Corners The border-radius property is a shorthand property for setting the four border- ...
- HDU2888 Check Corners
Description Paul draw a big m*n matrix A last month, whose entries Ai,j are all integer numbers ( 1 ...
- 【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 ...
- hdu2188 Check Corners
Check Corners Time Limit: 2000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Hdu 2888 Check Corners (二维RMQ (ST))
题目链接: Hdu 2888 Check Corners 题目描述: 给出一个n*m的矩阵,问以(r1,c1)为左上角,(r2,c2)为右下角的子矩阵中最大的元素值是否为子矩阵的顶点? 解题思路: 二 ...
- Android 用代码设置Shape,corners,Gradient
网上查找资料 记录学习 int strokeWidth = 5; // 3dp 边框宽度 int roundRadius = 15; // 8dp 圆角半径 int strokeColor = Col ...
- HDU-2888 Check Corners 二维RMQ
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2888 模板题.解题思路如下(转载别人写的): dp[row][col][i][j] 表示[row,ro ...
- 【CSS3】Advanced1:Rounded Corners
1.Border radius The border-radius property can be used to working clockwise from top-left set border ...
- 【HDOJ】2888 Check Corners
二维RMQ. /* 2888 */ #include <iostream> #include <algorithm> #include <cstdio> #incl ...
随机推荐
- C#有关的vshost、exe、config格式说明
vshost.exe.config是程序运行时的配置文本 exe.config是程序运行后会复制到vshost.exe.config app.config是在vshost.exe.config和exe ...
- Floyd算法实例
~ 当k=0时,我们关注的是邻接矩阵的第0行和第0列,即顶点0的入边和出边: 考察矩阵中其他元素,如果元素D[i][j]向第0行和第0列的投影D[0][j]和D[i][0]都有值,就说明原图中从 i ...
- Mysql利用match...against进行全文检索
在电商项目中,最核心的功能之一就是搜索功能,搜索做的好,整个电商平台就是个优秀的平台.一般搜索功能都使用搜索引擎如Lucene.solr.elasticsearch等,虽然这功能比较强大,但是对于一些 ...
- SQL-字符串连接聚合函数
原文:http://blog.csdn.net/java85140031/article/details/6820699 问题: userId role_name role_id 1 ...
- LR中点鼠标做关联(winsock协议)
转自:http://blog.csdn.net/zeeslo/article/details/1661791 今天写一下winsock的关联操作. 以前看过一个文档.在英文版的讲winsock的,其中 ...
- spring配置文件中bean标签
<bean id="beanId"(1) name="beanName"(2) class="beanClass"(3) parent ...
- ubuntu wine-qq安装
1.添加PPA sudo add-apt-repository ppa:ubuntu-wine/ppa 2.更新列表 sudo apt-get update 3.安装Wine sudo apt-get ...
- vertica时间计算SQL语句实例:统计一天内登录的用户
SQL语句实例: select count(id) as num from public.user where cast((CURRENT_TIMESTAMP-login_timed) day as ...
- 新唐ARM9之NUC972学习历程之系统的搭建和BSP包的使用
说到嵌入式,我们首先想到的,就是它的复杂程度,LINUX,BSP,UBOOT,交叉编译,寄存器配置,等等一系列的问题,甚至有的时候我们对此一头雾水,很是头疼,不过我们今天要说的就是关于NUC972的一 ...
- vue.js2.0+elementui ——> 后台管理系统
前言: 因为观察到vue.js的轻量以及实时更新数据的便捷性,于是新项目便决定使用vue.js2.0以及与之配套的elementui来完成.只是初次接触新框架,再使用过程中,遇见了各种各样“奇葩”的问 ...