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

本文共 1928 字,大约阅读时间需要 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正方形区域中的最大整数和最小整数的差值”的最小值。

题解:
  普及的题目。。。
  就是单调队列,用单调队列横向纵向分别求一下min和max就可以了。
  然而top打成tail,Wa了许多遍,太丢人啦。
代码:
#include
using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();} return x*f;}#define MN 1005#define inf 1e12int a,b,n,mp[MN][MN],ans;pair
q[MN];int top,tail,xmax[MN][MN],xmin[MN][MN];int ma[MN][MN],mi[MN][MN];void init(){top=0;tail=1;}void get(int x){
while(tail<=top&&q[tail].second<=x-n) tail++;}bool pd(int x,int y,int k){
if(x
y) return k^1;return true;}void ins(int x,int y,bool k){ while(tail<=top&&pd(q[top].first,x,k)) top--; q[++top]=make_pair(x,y);}int main(){ a=read(),b=read(),n=read(); register int i,j; for(i=1;i<=a;i++) for(j=1;j<=b;j++) mp[i][j]=read(); for(i=1;i<=a;i++){ init(); for(j=1;j<=b;j++){ get(j); ins(mp[i][j],j,1); xmax[i][j]=q[tail].first; } init(); for(j=1;j<=b;j++){ get(j); ins(mp[i][j],j,0); xmin[i][j]=q[tail].first; } } for(j=1;j<=b;j++){ init(); for(i=1;i<=a;i++){ get(i); ins(xmax[i][j],i,1); ma[i][j]=q[tail].first; } init(); for(i=1;i<=a;i++){ get(i); ins(xmin[i][j],i,0); mi[i][j]=q[tail].first; } } ans=inf; for(i=n;i<=a;i++)for(j=n;j<=b;j++) ans=min(ans,ma[i][j]-mi[i][j]); printf("%d\n",ans); return 0;}

来自PaperCloud的博客,未经允许,请勿转载,TKS

 
 

转载于:https://www.cnblogs.com/PaperCloud/p/9036673.html

你可能感兴趣的文章
大数据虚拟化零起点-3基础运维第二步-安装vSphere 5.1
查看>>
App-V5.0服务器部署
查看>>
Gartner:2012年大数据HypeCycle
查看>>
Lync 小技巧-4-我是否应该用动态内存
查看>>
写给同事的一封信
查看>>
详解Kafka生产者Producer配置
查看>>
SQL Server 2012笔记分享-9:理解列存储索引
查看>>
基于2.8版本redis配置文件中文解释
查看>>
《从零开始学Swift》学习笔记(Day 49)——扩展声明
查看>>
SFB 项目经验-58-Exchange 2016-POP3-配置-几年之伤(生产环境)
查看>>
网络资源管理系统LANsurveyor实战体验
查看>>
Windows 10 Build 9879 新变化(内含ISO下载)
查看>>
SFB 项目经验-39-分配公网证书 For 反向代理服务器 TMG 2010(图解)
查看>>
幼儿园小朋友可以教创业者的事
查看>>
SharePoint Server 2013 之二:准备数据库
查看>>
db link的查看创建与删除
查看>>
perl学习5--子程序中自动识别参数
查看>>
C#--GDI+的PathGradientBrush类的使用
查看>>
sql server 查询任务管理器数据
查看>>
让office2007支持公司痕迹保留
查看>>