[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 ...
随机推荐
- 通过cmd窗口导入导出mysql数据库
1.导入数据库 使用source命令 首先要在cmd窗口中连接数据库,然后再用source命令进行导入操作 mysql>use 数据库名 mysql>source d:/dbname.sq ...
- 团队作业4——第一次项目冲刺(Alpha版本)11.16
a. 提供当天站立式会议照片一张 举行站立式会议,讨论项目安排: 整理各自的任务汇报: 全分享遇到的困难一起讨论: 讨论接下来的计划: b. 每个人的工作 (有work item 的ID) 1.前两天 ...
- 局域网下访问其他计算机搭建的django网页
1.修改工程目录下的setting.py 文件 ALLOWED_HOSTS = ['*'] #*表示允许访问的ip 如果是添加* 则允许所有同局域网环境的主机访问 2.在完成的django工程下运行以 ...
- :after/:before使用技巧
伪类:after/:before基本使用 div:before{ content:'';//必须要写,没写则伪元素无效 display:; position:''; ... } //在一个div子元素 ...
- 《深入实践Spring Boot》阅读笔记之一:基础应用开发
上上篇「1718总结与计划」中提到,18年要对部分项目拆分,进行服务化,并对代码进行重构.公司技术委员会也推荐使用spring boot,之前在各个技术网站中也了解过,它可以大大简化spring配置和 ...
- spring-oauth-server实践:使用授权方式四:client_credentials 模式下access_token做业务!!!
spring-oauth-server入门(1-10)使用授权方式四:client_credentials 模式下access_token做业务!!! 准备工作 授权方式四::客户端方式: 服务网关地 ...
- Spring Security入门(1-12)Spring Security 的过滤器机制
Servlet过滤器被用来拦截用户请求来进行请求之前或之后的处理,或者干脆重定向这个请求,这取决于servlet过滤器的功能. Servlet过滤器处理之后的目标servlet是 MVC 分发web ...
- 【iOS】 含tableView的ViewController基类的实现
上篇博客写了ViewController的基类的实现,这篇博客主要写在BaseViewController的基础上实现一个含tableView控件的基类的实现,主要给包含tableView的页面来继承 ...
- [机器学习实战]K-近邻算法
1. K-近邻算法概述(k-Nearest Neighbor,KNN) K-近邻算法采用测量不同的特征值之间的距离方法进行分类.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近 ...
- logback中配置的日志文件的生成地址
配置文件如下 <?xml version="1.0" encoding="UTF-8"?> <configuration debug=&quo ...