先对于每一行中长度为 n 的列用单调队列搞出它们的最小/大值,再将这些长度为 n 的列想象成点再对行跑一遍

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int a, b, n, r[1005][1005], qwq[1005], qaq[1005], hwq, twq, haq, taq;
//qwq xiao ,qaq da
int hzxz[1005][1005], hzdz[1005][1005];
//hzxz[i][j]: the minist value in n cols which starts from j in row i
int zzxz[1005][1005], zzdz[1005][1005];
int ans=0x3f3f3f3f, t;
int main(){
cin>>a>>b>>n;
for(int i=1; i<=a; i++)
for(int j=1; j<=b; j++)
scanf("%d", &r[i][j]);
for(int i=1; i<=a; i++){
hwq = haq = 1;
twq = taq = 0;
for(int j=1; j<=b; j++){
t = max(1, j-n+1);
while(hwq<=twq && qwq[hwq]<=j-n) hwq++;
while(haq<=taq && qaq[haq]<=j-n) haq++;
while(hwq<=twq && r[i][qwq[twq]]>r[i][j]) twq--;
while(haq<=taq && r[i][qaq[taq]]<r[i][j]) taq--;
qwq[++twq] = j;
qaq[++taq] = j;
hzxz[i][t] = r[i][qwq[hwq]];
hzdz[i][t] = r[i][qaq[haq]];
}
}
for(int i=1; i<=b-n+1; i++){
hwq = haq = 1;
twq = taq = 0;
for(int j=1; j<=a; j++){
t = max(1, j-n+1);
while(hwq<=twq && qwq[hwq]<=j-n) hwq++;
while(haq<=taq && qaq[haq]<=j-n) haq++;
while(hwq<=twq && hzxz[qwq[twq]][i]>hzxz[j][i]) twq--;
while(haq<=taq && hzdz[qaq[taq]][i]<hzdz[j][i]) taq--;
qwq[++twq] = j;
qaq[++taq] = j;
zzxz[t][i] = hzxz[qwq[hwq]][i];
zzdz[t][i] = hzdz[qaq[haq]][i];
}
}
for(int i=1; i<=a-n+1; i++)
for(int j=1; j<=b-n+1; j++)
ans = min(ans, zzdz[i][j]-zzxz[i][j]);
cout<<ans<<endl;
return 0;
}

luogu2216 [HAOI2007]理想的正方形的更多相关文章

  1. [luogu2216 HAOI2007] 理想的正方形 (2dST表 or 单调队列)

    题目描述 有一个ab的整数组成的矩阵,现请你从中找出一个nn的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至第a ...

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

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

  3. HAOI2007 理想的正方形

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1402  Solved: 738[Submit][Sta ...

  4. RAM——[HAOI2007]理想的正方形

    题目:[HAOI2007]理想的正方形 描述: [问题描述] 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. [输入]: 第一行为3个 ...

  5. bzoj 1047 : [HAOI2007]理想的正方形 单调队列dp

    题目链接 1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2369  Solved: 1266[Submi ...

  6. BZOJ 1047: [HAOI2007]理想的正方形( 单调队列 )

    单调队列..先对每一行扫一次维护以每个点(x, y)为结尾的长度为n的最大最小值.然后再对每一列扫一次, 在之前的基础上维护(x, y)为结尾的长度为n的最大最小值. 时间复杂度O(ab) (话说还是 ...

  7. 【BZOJ1047】[HAOI2007]理想的正方形(单调队列,动态规划)

    [BZOJ1047][HAOI2007]理想的正方形(单调队列,动态规划) 题面 BZOJ 洛谷 题解 直接一个单调队列维护一下没给点和它前面的\(n\)个位置的最大值,再用一次单调队列维护连续\(n ...

  8. bzoj千题计划215:bzoj1047: [HAOI2007]理想的正方形

    http://www.lydsy.com/JudgeOnline/problem.php?id=1047 先用单调队列求出每横着n个最大值 再在里面用单调队列求出每竖着n个的最大值 这样一个位置就代表 ...

  9. 【BZOJ1047】[HAOI2007]理想的正方形

    [BZOJ1047][HAOI2007]理想的正方形 题面 bzoj 洛谷 题解 二维\(st\)表,代码是以前的 #include<iostream> #include<cstdi ...

随机推荐

  1. Spring Security LDAP简介

    1.概述 在本快速教程中,我们将学习如何设置Spring Security LDAP. 在我们开始之前,了解一下LDAP是什么? - 它代表轻量级目录访问协议.它是一种开放的,与供应商无关的协议,用于 ...

  2. 将GitLab上面的代码克隆到本地

    1.安装GitLab客户端 2.去GitLab服务端找项目路径 3.去GitLab客户端去克隆代码 右键-->git Clone 4.最后结果

  3. File "<stdin>" , line 1

    写了一个hello.py,仅有一句,print 'hello world', 运行 Python hello.py 出错,提示: File "<stdin>" , li ...

  4. vue2.0:(二)、mock数据

    什么是mock数据呢?很多情况下,后台的搭建比起前端来说要麻烦的多,所以,常常是前端写好了页面以后后台接口却没有写好,但是在一个项目中,接口调试确实是最浪费时间的,所以,往往前端需要自己模拟数据. 第 ...

  5. calendar.getTimeInMillis() 和 System.currentTimeMillis() 的区别

    @Test public void test01(){ Calendar calendar=Calendar.getInstance(); // calendar.set(2019,06,04,16, ...

  6. c++的const和static区别

    const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的 ...

  7. (一)maven之创建一个maven项目

    为什么要使用Maven? 1.  maven使用的是本地仓库存储jar,所有项目都会共用仓库中的同一份jar. 2.  Spring core.jar必须同时引用版本兼容的common-logging ...

  8. Vue-Quill-Editor 富文本编辑器的使用

    步骤如下: 1.下载Vue-Quill-Editor npm install vue-quill-editor --save 2.下载quill(Vue-Quill-Editor需要依赖) npm i ...

  9. selenium-介绍和安装

    前戏 相信大家对web自动化selenium都不陌生,是一个web自动化框架,我在第一家公司的时候,产品是两个星期一个版本,每一次发布测试都要进行回归测试,也就是大家说的点点点,后来我就想,能不能做成 ...

  10. Navicat 复制多条数据