bzoj1047 理想的正方形
Description
有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小。
Input
第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数。每行相邻两数之间用一空格分隔。
Output
仅一个整数,为a*b矩阵中所有“n*n正方形区域中的最大整数和最小整数的差值”的最小值。
水平方向用单调队列扫一次得出所有1*n区域的最大值和最小值
竖直方向再用单调队列扫一次上一部记录的最大值和最小值得出所有n*n区域的最大值和最小值
时间复杂度O(n2)
#include<cstdio>
int a,b,n,v[][];
int mx1[][],mn1[][];
int mx2[][],mn2[][];
struct{
int q[],qt[];
int qs,qe;
void clear(){
qs=qe=;
}
void push(int x,int t){
while(qs<qe&&q[qe-]<=x)--qe;
qt[qe]=t;
q[qe++]=x;
}
void chk(int p){
while(qs<qe&&qt[qs]<=p)qs++;
}
int max(){
return q[qs];
}
}q1;
struct{
int q[],qt[];
int qs,qe;
void clear(){
qs=qe=;
}
void push(int x,int t){
while(qs<qe&&q[qe-]>=x)--qe;
qt[qe]=t;
q[qe++]=x;
}
void chk(int p){
while(qs<qe&&qt[qs]<=p)qs++;
}
int min(){
return q[qs];
}
}q2;
int main(){
scanf("%d%d%d",&a,&b,&n);
for(int i=;i<a;i++)
for(int j=;j<b;j++)scanf("%d",v[i]+j);
for(int i=;i<a;i++){
q1.clear();
q2.clear();
for(int j=;j<n;j++)q1.push(v[i][j],j),q2.push(v[i][j],j);
mx1[i][n-]=q1.max();
mn1[i][n-]=q2.min();
for(int j=n;j<b;j++){
q1.push(v[i][j],j);
q1.chk(j-n);
mx1[i][j]=q1.max();
q2.push(v[i][j],j);
q2.chk(j-n);
mn1[i][j]=q2.min();
}
}
for(int j=;j<b;j++){
q1.clear();
q2.clear();
for(int i=;i<n;i++)q1.push(mx1[i][j],i),q2.push(mn1[i][j],i);
mx2[n-][j]=q1.max();
mn2[n-][j]=q2.min();
for(int i=n;i<a;i++){
q1.push(mx1[i][j],i);
q1.chk(i-n);
mx2[i][j]=q1.max();
q2.push(mn1[i][j],i);
q2.chk(i-n);
mn2[i][j]=q2.min();
}
}
int minv=;
for(int i=n-;i<a;i++){
for(int j=n-;j<b;j++){
if(mx2[i][j]-mn2[i][j]<minv)minv=mx2[i][j]-mn2[i][j];
}
}
printf("%d",minv);
return ;
}
bzoj1047 理想的正方形的更多相关文章
- bzoj1047理想的正方形
题目链接 纪念又双叒叕的一道暴力碾标算的题 我们考虑纯暴力 #include<iostream> #include<cstdio> #include<algorithm& ...
- 【bzoj1047】理想的正方形
[bzoj1047]理想的正方形 题意 给定\(a*b\)由整数组成的矩形. 现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值 的差最小. \(1\leq a,b\leq 10 ...
- 【BZOJ1047】[HAOI2007]理想的正方形(单调队列,动态规划)
[BZOJ1047][HAOI2007]理想的正方形(单调队列,动态规划) 题面 BZOJ 洛谷 题解 直接一个单调队列维护一下没给点和它前面的\(n\)个位置的最大值,再用一次单调队列维护连续\(n ...
- 【BZOJ1047】[HAOI2007]理想的正方形
[BZOJ1047][HAOI2007]理想的正方形 题面 bzoj 洛谷 题解 二维\(st\)表,代码是以前的 #include<iostream> #include<cstdi ...
- [bzoj1047][HAOI2007]理想的正方形_动态规划_单调队列
理想的正方形 bzoj-1047 HAOI-2007 题目大意:有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 注释:$2\le a, ...
- BZOJ1047: [HAOI2007]理想的正方形 [单调队列]
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2857 Solved: 1560[Submit][St ...
- bzoj千题计划215:bzoj1047: [HAOI2007]理想的正方形
http://www.lydsy.com/JudgeOnline/problem.php?id=1047 先用单调队列求出每横着n个最大值 再在里面用单调队列求出每竖着n个的最大值 这样一个位置就代表 ...
- 【BZOJ1047】[HAOI2007]理想的正方形 (倍增ST表)
[HAOI2007]理想的正方形 题目描述 有一个\(a*b\)的整数组成的矩阵,现请你从中找出一个\(n*n\)的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: ...
- HAOI2007 理想的正方形
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1402 Solved: 738[Submit][Sta ...
随机推荐
- Flash Player离线安装包下载指南
在机房里装软件,没网是正常现象,有些老师要装Firefox/Chrome浏览器要有Flash,网上搜来搜去都是在线安装包一日在V2EX闲逛时发现了一位大神给出了Flash的离线安装包下载方式,在此立个 ...
- UAC 注册表 WIN64 OS 运行时主题
首先EXE程序是32位,DelphiIDE对Project默认是启用主题的,默认情况在WIN64 OS下运行时,无管理员权限. WIN64 OS,默认情况下UAC是启用的. 上述默认情况下,EXE 是 ...
- 获取jsp选中复选框的id传到后台controller,进行逻辑删除等操作
逻辑删除设备:(数据表中还有这条记录,不显示出来) 思路: 数据表加个字段display,值为Y/N,只显示display为Y的,删除时,把display的值改为N,就不会显示出来 jsp页面如下图, ...
- 软工作业No.8 第六周 Alpha阶段项目复审
小组的名字和链接 优点 缺点,bug报告 (至少140字) 最终名次 (无并列) 未来的将来的明天在那里等你 http://www.cnblogs.com/macrae/p/9940387.html ...
- hibernate 各种主键生成策略(转)
http://www.cnblogs.com/kakafra/archive/2012/09/16/2687569.html 1.assigned 主键由外部程序负责生成,在 save() 之前必须指 ...
- win10下tomcat环境搭建
一.下载tomcat 用浏览器打开tomcat官网:http://tomcat.apache.org/ 在左侧的导航栏Download下方选择最新的Tomcat 9,点击页面下方的“ 64-bit W ...
- magento -- 给Magento提速之缓存上的探索
依然在为Magento提速做努力,除了自带的缓存和编译,之前的所作的很多努力都是从减少JS,Css,图片等载入时间入手,而对页面载入耗时最早有时也是最大的一部分--获取页面数据没有做太多处理,以gap ...
- Java语言基础——数据类型与运算符
标识符: 1.组成元素由字母.数字.下划线.美元符号($) 2.标识符不能以数字开头 3.标识符严格区分大小写 4.标识符的命名要有意义(见名知意) 注释: 1.单行注释 // 2.多行注释 /* 注 ...
- Pycharm出现的部分快捷键无效问题及解决办法
为了进行python开发,下载了Pycharm.但是发现启动后,执行ctrl+c和ctrl+v等快捷键都无法生效. 网上搜索了下,参考https://blog.csdn.net/c2366994582 ...
- android复制包需要修改的几个地方
1.要看什么情况,若是在同一个eclipse下,那么就需要修改包名.若不在的话,那就可以不用了. 2.这个app_name也是一样. 3.先说下情况,这是我修改好的.原本这个R的是引之前包的,必须要改 ...