博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[bzoj 1047][HAOI2007]理想的正方形
阅读量:4873 次
发布时间:2019-06-11

本文共 2046 字,大约阅读时间需要 6 分钟。

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
 
题解:
对于原矩阵每行维护两个单调队列(最大和最小)
然后对得到的max数组和min数组每列再次维护一个单调队列
四次单调队列就ok,弄清楚原理之后这个东西套模板就好
其实就是打一遍然后复制粘贴..
 
代码:
#include 
#define ll int#define inf 1<<30#define max(x,y) x>y?x:y#define min(x,y) x
0?x:-xinline void read(ll &x){ x=0;ll f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-f;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} x*=f;}using namespace std;#define N 1010ll n,m,len;ll a[N][N];ll q1[N],q2[N];ll MAX[N][N],MIN[N][N];ll L1[N],L2[N],R1[N],R2[N],Q1[N][N],Q2[N][N];ll ans=((1<<30)-1)<<1|1;int main(){ read(n);read(m);read(len); for(ll i=1;i<=n;i++){ for(ll j=1;j<=m;j++){ read(a[i][j]); } }// mt(L1,1);mt(L2,1);mt(R1,0);mt(R2,0); for(ll i=1;i<=m;i++)L1[i]=L2[i]=1,R1[i]=R2[i]=0; for(ll i=1;i<=n;i++){ ll r1=0,l1=1,r2=0,l2=1; for(ll j=m;j>=1;j--){ MAX[i][j]=MIN[i][j]=a[i][j]; while(l1<=r1&&q1[l1]-j>=len)l1++; while(l2<=r2&&q2[l2]-j>=len)l2++; while(l1<=r1&&a[i][j]>a[i][q1[r1]])r1--; q1[++r1]=j; if(l1<=r1)MAX[i][j]=max(MAX[i][j],a[i][q1[l1]]); while(l2<=r2&&a[i][j]
=1;j--){ while(L1[j]<=R1[j]&&i-Q1[j][L1[j]]>=len)L1[j]++; while(L2[j]<=R2[j]&&i-Q2[j][L2[j]]>=len)L2[j]++; while(L1[j]<=R1[j]&&MAX[i][j]>MAX[Q1[j][R1[j]]][j])R1[j]--; while(L2[j]<=R2[j]&&MIN[i][j]
=len){ if(L1[j]<=R1[j]&&L2[j]<=R2[j]){ ans=min(ans,MAX[Q1[j][L1[j]]][j]-MIN[Q2[j][L2[j]]][j]); } } } } printf("%d\n",ans);}

  

转载于:https://www.cnblogs.com/henry-1202/p/8783764.html

你可能感兴趣的文章
自动化测试用例getText()获取某一个元素的值返回null或空
查看>>
大数智能未来
查看>>
virtualenv和virtualenvwrapper 的安装和使用
查看>>
MAC sublime text 无法自动补齐标签
查看>>
NgBook留言本开发全过程(1)
查看>>
LeetCode-指针法
查看>>
Python之路,Day12 - 那就做个堡垒机吧
查看>>
linux之shell之if、while、for语句介绍
查看>>
Mysql phpStudy升级Mysql版本,流产了怎么办?
查看>>
SQLServer之数据库行锁
查看>>
OFDM仿真
查看>>
代理模式
查看>>
AC日记——背包问题 V2 51nod 1086
查看>>
CSS关键字
查看>>
UIAlertView
查看>>
ES6快速入门(三)类与模块
查看>>
赛博web
查看>>
Java动手动脑第四讲课堂作业
查看>>
PowerDesigner 数据建模技术视频教程
查看>>
Webpack 开发服务器代理设置解决跨域问题
查看>>