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 ...
随机推荐
- 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 AD转换接 ...
- 用MyEclipse JPA创建项目(三)
MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] 本教程介绍了MyEclipse中的一些基于PA的功能. 阅读本教程时,了解J ...
- MyEclipse WebSphere开发教程:WebSphere 8安装指南(一)
[周年庆]MyEclipse个人授权 折扣低至冰点!立即开抢>> [MyEclipse最新版下载] IBM为使用WebSphere测试应用程序的开发人员提供了免费的WebSphere Ap ...
- SharePoint Infopath表单服务-PowerShell
1. 激活可浏览的表单模板 Set-SPInfoPathFormsService -AllowUserFormBrowserEnabling $true -AllowUserFormBrowserRe ...
- oracle索引原理
B-TREE索引(二叉树索引,默认情况下,我们建的索引都是此种类型) 一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点.可以用下图一来描述B树索引的结构.其中,B表示分支节点,而L表示叶 ...
- 解决Ubuntu下在firefox中打开Microsoft Outlook Web Access中文乱码
Edit---Preference--Content--Languages--Choose...---Select a langue to add... 添加中文
- HDU 1589 Stars Couple(计算几何求二维平面的最近点对和最远点对)
Time Limit: 1000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- 记一次MSSQL到MySQL大数据迁移过程
工作中遇到一个需求 要将MSSQL数据库中共计12张表的数据大概1000W行数据迁移到MySQL数据库中,去年另一个同事负责这件事情,他采用的方法是先将MSSQL数据库里的数据生成同MySQL数据库表 ...
- [LeetCode&Python] Problem 589. N-ary Tree Preorder Traversal
Given an n-ary tree, return the preorder traversal of its nodes' values. For example, given a 3-ary ...
- 20155237 2016-2017-2 《Java程序设计》第6周学习总结
20155237 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入与输出 InputStream与OutputStream 流(Stream)是对 ...