http://www.lydsy.com/JudgeOnline/problem.php?id=1047

先用单调队列求出每横着n个最大值

再在里面用单调队列求出每竖着n个的最大值

这样一个位置就代表了一个n*n矩阵的最大值

同理求出最小值

#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 1001 int num[N][N]; int mx1[N][N],mx2[N][N];
int mi1[N][N],mi2[N][N]; int q[N],pos[N],h,t; void read(int &x)
{
x=; int f=; char c=getchar();
while(!isdigit(c)) { if(c=='-') f=-; c=getchar(); }
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
x*=f;
} int main()
{
#ifndef ONLINE_JUDGE
freopen("data.in","r",stdin);
freopen("xxy.out","w",stdout);
#endif
int a,b,n;
read(a); read(b); read(n);
for(int i=;i<=a;++i)
for(int j=;j<=b;++j)
read(num[i][j]);
for(int i=;i<=a;++i)
{
h=t=;
for(int j=;j<=b;++j)
{
while(h<t && j-pos[h]+>n) h++;
while(h<t && num[i][j]>q[t-]) t--;
q[t]=num[i][j];
pos[t++]=j;
if(j>=n) mx1[i][j]=q[h];
}
}
for(int j=n;j<=b;++j)
{
h=t=;
for(int i=;i<=a;++i)
{
while(h<t && i-pos[h]+>n) h++;
while(h<t && mx1[i][j]>q[t-]) t--;
q[t]=mx1[i][j];
pos[t++]=i;
if(i>=n) mx2[i][j]=q[h];
}
}
for(int i=;i<=a;++i)
{
h=t=;
for(int j=;j<=b;++j)
{
while(h<t && j-pos[h]+>n) h++;
while(h<t && num[i][j]<q[t-]) t--;
q[t]=num[i][j];
pos[t++]=j;
if(j>=n) mi1[i][j]=q[h];
}
}
for(int j=n;j<=b;++j)
{
h=t=;
for(int i=;i<=a;++i)
{
while(h<t && i-pos[h]+>n) h++;
while(h<t && mi1[i][j]<q[t-]) t--;
q[t]=mi1[i][j];
pos[t++]=i;
if(i>=n) mi2[i][j]=q[h];
}
}
int ans=2e9;
for(int i=n;i<=a;++i)
for(int j=n;j<=b;++j)
ans=min(ans,mx2[i][j]-mi2[i][j]);
printf("%d",ans);
}

AC

#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 1001 int num[N][N]; int mx[N][N];
int mi[N][N]; int q[N],pos[N],h,t; void read(int &x)
{
x=; int f=; char c=getchar();
while(!isdigit(c)) { if(c=='-') f=-; c=getchar(); }
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
x*=f;
} int main()
{
freopen("data.in","r",stdin);
freopen("std.out","w",stdout);
int a,b,n;
read(a); read(b); read(n);
for(int i=;i<=a;++i)
for(int j=;j<=b;++j)
read(num[i][j]);
int ans=1e9;
for(int i=;i+n-<=a;++i)
for(int j=;j+n-<=b;++j)
{
int I=i+n-;
int J=j+n-;
int p=1e9,q=-1e9;
for(int k=i;k<=I;++k)
for(int l=j;l<=J;++l)
p=min(p,num[k][l]),q=max(q,num[k][l]);
ans=min(ans,q-p);
}
printf("%d",ans);
}

force

#include<cmath>
#include<cstdlib>
#include<cstdio>
#include<ctime> using namespace std; int main()
{
freopen("data.in","w",stdout);
srand(time()+);
int a=,b=;
int n=rand()%+;
printf("%d %d %d\n",a,b,n);
for(int i=;i<=a;++i)
{
for(int j=;j<=b;++j) printf("%d ",rand());
printf("\n");
}
}

maker

1047: [HAOI2007]理想的正方形

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 3791  Solved: 2095
[Submit][Status][Discuss]

Description

  有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值
的差最小。

Input

  第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数。每
行相邻两数之间用一空格分隔。
100%的数据2<=a,b<=1000,n<=a,n<=b,n<=1000

Output

  仅一个整数,为a*b矩阵中所有“n*n正方形区域中的最大整数和最小整数的差值”的最小值。

Sample Input

5 4 2
1 2 5 6
0 17 16 0
16 17 2 1
2 10 2 1
1 2 2 2

Sample Output

1

bzoj千题计划215:bzoj1047: [HAOI2007]理想的正方形的更多相关文章

  1. BZOJ1047: [HAOI2007]理想的正方形 [单调队列]

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2857  Solved: 1560[Submit][St ...

  2. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  3. [bzoj1047][HAOI2007]理想的正方形_动态规划_单调队列

    理想的正方形 bzoj-1047 HAOI-2007 题目大意:有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 注释:$2\le a, ...

  4. bzoj千题计划186:bzoj1048: [HAOI2007]分割矩阵

    http://www.lydsy.com/JudgeOnline/problem.php?id=1048 #include<cmath> #include<cstdio> #i ...

  5. bzoj千题计划296:bzoj1053: [HAOI2007]反素数ant

    http://www.lydsy.com/JudgeOnline/problem.php?id=1053 求n以内约数个数最多的数 #include<cstdio> using names ...

  6. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  7. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

  8. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  9. bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...

随机推荐

  1. effective c++ 笔记 (31-34)

    //---------------------------15/04/20---------------------------- //#32   确定你的public继承塑膜出 is-a 关系 { ...

  2. 转 ssh-keygen 的 详解

    为了让两个linux机器之间使用ssh不需要用户名和密码.所以采用了数字签名RSA或者DSA来完成这个操作. 模型分析 假设 A (192.168.20.59)为客户机器,B(192.168.20.6 ...

  3. CentOS7安装OpenStack(Rocky版)-01.控制节点的系统环境准备

    分享一下Rocky版本的OpenStack安装管理经验: OpenStack每半年左右更新一版,目前是版本是201808月发布的版本-R版(Rocky),目前版本安装方法优化较好,不过依然是比较复杂 ...

  4. 假设检验,alpha,p值 通俗易懂的的理解。

    假设检验: 一般原假设H0 :表是为 XXX和YYYY无显著差异,H1,是有显著差异. 如果我们定义alpha的值是0.05.意味着我们接受H0是真的但是我们却认为他是假的的概率. 这里你想想,这个值 ...

  5. vue入门全局配置

    全局配置 Vue.config 是一个对象,包含 Vue 的全局配置.可以在启动应用之前修改下列属性: silent 类型:boolean 默认值:false 用法: Vue.config.silen ...

  6. jsp学习之包含——include

    http://blog.e23.cn/?uid-1255655-action-viewspace-itemid-134232 1.include: Include 指令: <%@ include ...

  7. Teechart使用记录

    一.      Chart 1.1 Series 在该界面可以进行曲线的添加.删除.修改 1.2 General 在该界面 Margins 可以设置整个坐标系外边距. 在这里可是设置放大功能. All ...

  8. 如何花样展示自己的摄影作品?强大的WebGL能力展示

    注意:Windows平台推荐使用Edge.Chrome.FireFox,部分浏览器打不开 P.S.慢慢用鼠标在图片上拖拽会感觉更神奇    

  9. [Delphi]实现使用TIdHttp控件向https地址Post请求[转]

    开篇:公司之前一直使用http协议进行交互(比如登录等功能),但是经常被爆安全性不高,所以准备改用https协议.百度了一下资料,其实使用IdHttp控件实现https交互的帖子并不少,鉴于这次成功实 ...

  10. Yii框架的原代码

    http://www.digpage.com/app_struct.html#index-php