[HAOI 2007]理想的正方形
Description
有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小。
Input
第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数。每行相邻两数之间用一空格分隔。
Output
仅一个整数,为a*b矩阵中所有“n*n正方形区域中的最大整数和最小整数的差值”的最小值。
Sample Input
1 2 5 6
0 17 16 0
16 17 2 1
2 10 2 1
1 2 2 2
Sample Output
HINT
(1)矩阵中的所有数都不超过1,000,000,000
(2)20%的数据2<=a,b<=100,n<=a,n<=b,n<=10
(3)100%的数据2<=a,b<=1000,n<=a,n<=b,n<=100
题解
网上的题解有用单调队列做的,私认为这道题暴力完全可以水过去...
这里给出一种$RMQ$的做法。
二维的$RMQ$求正方形内的最值,和一维没什么不同,只是倍增以及询问的时候要分四块。
#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<string>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=; int a,b,n,op;
int minn[N+][N+][],maxn[N+][N+][]; int main()
{
scanf("%d%d%d",&a,&b,&n);
for (int i=;i<=a;i++)
for (int j=;j<=b;j++)
{
scanf("%d",&minn[i][j][]);
maxn[i][j][]=minn[i][j][];
}
op=log2(n);
for (int t=;t<=op;t++)
for (int i=;i+(<<t)-<=a;i++)
for (int j=;j+(<<t)-<=b;j++)
{
minn[i][j][t]=min(minn[i][j][t-],minn[i][j+(<<t-)][t-]);
minn[i][j][t]=min(minn[i][j][t],minn[i+(<<t-)][j][t-]);
minn[i][j][t]=min(minn[i][j][t],minn[i+(<<t-)][j+(<<t-)][t-]);
maxn[i][j][t]=max(maxn[i][j][t-],maxn[i][j+(<<t-)][t-]);
maxn[i][j][t]=max(maxn[i][j][t],maxn[i+(<<t-)][j][t-]);
maxn[i][j][t]=max(maxn[i][j][t],maxn[i+(<<t-)][j+(<<t-)][t-]);
}
int ansmax,ansmin,ans=2e9;
for (int i=;i+n-<=a;i++)
for (int j=;j+n-<=b;j++)
{
ansmax=max(maxn[i][j][op],maxn[i][j+n-(<<op)][op]);
ansmax=max(ansmax,maxn[i+n-(<<op)][j][op]);
ansmax=max(ansmax,maxn[i+n-(<<op)][j+n-(<<op)][op]);
ansmin=min(minn[i][j][op],minn[i][j+n-(<<op)][op]);
ansmin=min(ansmin,minn[i+n-(<<op)][j][op]);
ansmin=min(ansmin,minn[i+n-(<<op)][j+n-(<<op)][op]);
ans=min(ans,ansmax-ansmin);
}
printf("%d\n",ans);
return ;
}
[HAOI 2007]理想的正方形的更多相关文章
- BZOJ1047: [HAOI2007]理想的正方形 [单调队列]
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2857 Solved: 1560[Submit][St ...
- 【bzoj1047】理想的正方形
[bzoj1047]理想的正方形 题意 给定\(a*b\)由整数组成的矩形. 现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值 的差最小. \(1\leq a,b\leq 10 ...
- HAOI2007 理想的正方形
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1402 Solved: 738[Submit][Sta ...
- RAM——[HAOI2007]理想的正方形
题目:[HAOI2007]理想的正方形 描述: [问题描述] 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. [输入]: 第一行为3个 ...
- bzoj 1047 : [HAOI2007]理想的正方形 单调队列dp
题目链接 1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2369 Solved: 1266[Submi ...
- BZOJ 1047: [HAOI2007]理想的正方形( 单调队列 )
单调队列..先对每一行扫一次维护以每个点(x, y)为结尾的长度为n的最大最小值.然后再对每一列扫一次, 在之前的基础上维护(x, y)为结尾的长度为n的最大最小值. 时间复杂度O(ab) (话说还是 ...
- 【BZOJ1047】[HAOI2007]理想的正方形(单调队列,动态规划)
[BZOJ1047][HAOI2007]理想的正方形(单调队列,动态规划) 题面 BZOJ 洛谷 题解 直接一个单调队列维护一下没给点和它前面的\(n\)个位置的最大值,再用一次单调队列维护连续\(n ...
- bzoj千题计划215:bzoj1047: [HAOI2007]理想的正方形
http://www.lydsy.com/JudgeOnline/problem.php?id=1047 先用单调队列求出每横着n个最大值 再在里面用单调队列求出每竖着n个的最大值 这样一个位置就代表 ...
- 【BZOJ1047】[HAOI2007]理想的正方形
[BZOJ1047][HAOI2007]理想的正方形 题面 bzoj 洛谷 题解 二维\(st\)表,代码是以前的 #include<iostream> #include<cstdi ...
随机推荐
- springboot elasticsearch 集成注意事项
文章来源: http://www.cnblogs.com/guozp/p/8686904.html 一 elasticsearch基础 这里假设各位已经简单了解过elasticsearch,并不对es ...
- JavaScript(第八天)【时间与日期】
ECMAScript提供了Date类型来处理时间和日期.Date类型内置一系列获取和设置日期时间信息的方法. 一.Date类型 ECMAScript中的Date类型是在早期Java中java.util ...
- [福大软工] W班 总成绩排行榜
评分链接 作业1 作业2 作业3 作业4 总分排名
- C语言程序设计基础-第1周作业-初步
1.安装带有计算机术语的翻译软件 2.在自己电脑上安装C编译器,windows系统建议安装dev-c++,其他系统自行查找. 3.加入课程小组,有任何疑问可以在小组中提问:https://group. ...
- 201621123062《java程序设计》第九周作业总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 思维导图1:(对集合部分做了一些改动和细化) 思维导图2:(泛型) 1.2 选做:收集你认为有用的代码片段 代 ...
- 冲刺NO.5
Alpha冲刺第五天 站立式会议 项目进展 今日项目完成内容主要包括了JS的学习,事务管理员模块与学生模块的完善与补充,并且开始编写信用信息管理模块和奖惩事务管理模块. 问题困难 前端部分的技术掌握的 ...
- Python实现基于协程的异步爬虫
一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Jiryu Davis 与 Python ...
- js:防抖动与节流
http://blog.csdn.net/crystal6918/article/details/62236730
- Entity Framework Core Code First
参考地址:https://docs.microsoft.com/zh-cn/ef/core/get-started/aspnetcore/new-db
- HTML事件处理程序
事件处理程序中的代码执行时,有权访问全局作用域中任何代码. //为按钮btn_event添加了两个个事件处理程序,而且该事件会在冒泡阶段触发(最后一个参数是false). var btn_event ...