这种在矩形里面找矩形有固定的套路,不是容斥就是左右上下延伸,这个题就是向左向右延伸、、

然后手玩优化发现邻位转移比暴力要好一些,可以用splay统计,但复杂度不对

然后由于每一行互不影响于是可以单行同步操作

然后统计的时候就枚举列操作一遍

于是有限制最大值和最小值就转化为单调队列

所以这个题就是二维单调队列了

码:

#include<iostream>
#include<cstdio>
using namespace std;
#define N 1005
int a,b,n,i,j,v[N][N],z1[N],z2[N],z3[N],z4[N],q1[N][N],q3[N][N],qq1[N],qq3[N],zz1,zz2,zz3,zz4,ans=2000000009;
int main()
{scanf("%d%d%d",&a,&b,&n);for(i=1;i<=a;i++)for(j=1;j<=b;j++)scanf("%d",&v[i][j]);for(i=1;i<=b;i++)z1[i]=z3[i]=1,z2[i]=z4[i]=0;for(i=1;i<=a;i++){for(j=1;j<=b;j++){while(z1[j]<=z2[j]&&q1[j][z1[j]]<=i-n)++z1[j];while(z1[j]<=z2[j]&&v[q1[j][z2[j]]][j]<v[i][j])--z2[j];q1[j][++z2[j]]=i;while(z3[j]<=z4[j]&&q3[j][z3[j]]<=i-n)++z3[j];while(z3[j]<=z4[j]&&v[q3[j][z4[j]]][j]>v[i][j])--z4[j];q3[j][++z4[j]]=i;   }if(i>=n){zz1=1;zz2=0;zz3=1;zz4=0;for(j=1;j<=b;j++){while(zz1<=zz2&&qq1[zz1]<=j-n)++zz1;while(zz1<=zz2&&v[ q1[qq1[zz2]][z1[qq1[zz2]]] ][qq1[zz2]]<v[q1[j][z1[j] ]][j])--zz2;qq1[++zz2]=j;while(zz3<=zz4&&qq3[zz3]<=j-n)++zz3;while(zz3<=zz4&&v[ q3[qq3[zz4]][z3[qq3[zz4]]] ][qq3[zz4]]>v[q3[j][z3[j] ]][j])--zz4;qq3[++zz4]=j;if(j>=n){  ans=min(ans,v[q1[qq1[zz1]][z1[qq1[zz1]]]][ qq1[zz1] ] -v[q3[qq3[zz3]][z3[qq3[zz3]]]][ qq3[zz3] ]); }   }}}printf("%d",ans);
}

bzoj1047 [HAOI2007]理想的正方形 单调队列相关推荐

  1. [HAOI2007] 理想的正方形 (单调队列)

    题目链接 Solution MD,经过这道题,算是掌握单调队列了... 可以先预处理出点 \((i,j)\) 往上 \(n\) 的最大值和最小值. 然后再横着做一遍单调队列即可. Code #incl ...

  2. BZOJ 1047: [HAOI2007]理想的正方形 单调队列瞎搞

    题意很简明吧? 枚举的矩形下边界和右端点即右下角,来确定矩形位置: 每一个纵列开一个单调队列,记录从 i-n+1 行到 i 行每列的最大值和最小值,矩形下边界向下推移的时候维护一下: 然后在记录的每一 ...

  3. bzoj1047/luogu2216 理想的正方形 (单调队列)

    开b组单调队列,分别维护此时某一列中的最大/最小值 然后我每次把它们的头取出来,塞到维护行的单调队列里,就是n*n的最大/最小值 1 #include<bits/stdc++.h> 2 # ...

  4. P2216 理想的正方形 单调队列 (二维)

    题目链接:https://www.luogu.org/problem/P2216 题意:求给定n*m的矩形中所有k*k的正方形块中最大值最小值之差(极差)最小 哇,大神的思路真的很帅 单调队列对每一行 ...

  5. BZOJ 1047 理想的正方形(单调队列)

    刚开始用二维RMQ直接给超内存了... 用单调队列可以做到O(n^2)的复杂度.具体是先把每行用单调队列处理一下.再把处理后的用列单调队列处理下. # include <cstdio> # ...

  6. AcWing1091.理想的正方形(单调队列DP)

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

  7. [HAOI2007] 理想的正方形

    洛谷题目链接:[HAOI2007]理想的正方形 题目描述 有一个ab的整数组成的矩阵,现请你从中找出一个nn的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行 ...

  8. P2216 [HAOI2007]理想的正方形

    P2216 [HAOI2007]理想的正方形 题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. a,b<=1000 分析 ...

  9. bzoj 1047: [HAOI2007]理想的正方形

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3324  Solved: 1828 [Submit][ ...

最新文章

  1. 免费学习编程的10个好工具
  2. 王敏捷 - 深度学习框架这十年!
  3. Tensorflow 错误总结:ImportError: cannot import name add_newdocs.
  4. Mathematica常用命令
  5. cudnn下载_Windows10安装 cuDNN 方法
  6. mysql 主表存hash和子表的名字_【mysql】mysql分表和表分区详解
  7. 企业级实际性能测试案例与经验分享
  8. Spring知识点总结-3
  9. 一个超好用的笔记编辑器
  10. Spring 揭秘之Spring框架的由来
  11. 投稿选刊必备,2021较全的国内SCI期刊汇总整理
  12. 下岗工冰城卖火“鱼豆腐”
  13. 魔域充值卡表cq_card里chk_sum参数的算法
  14. 【Android开发-4】进入实践,最喜欢折腾的计算器
  15. 1144_Docker的基本介绍
  16. iOS之深入解析Memory内存
  17. 专家称谷歌收购摩托罗拉意在专利
  18. EAS 销售出库单上的部门 显示规则
  19. 如何去选择高防服务器
  20. C++中eof(),bad(),fail(),good(),clear()

热门文章

  1. SpringBoot的日志框架
  2. java.util.PropertyPermission“ “org.graalvm.nativeimage.imagecode“ “read“
  3. Windows 10 + anaconda3快速配置tensorflow-gpu开发环境
  4. 避免使用GroupByKey
  5. python数据分析常用类库(1.1)
  6. mysql group by_技术分享 | 回顾 MySQL 的 MTS
  7. java月实训小结800字_Java实训小结
  8. notes java api_如何使用Java来调用Notes API发送邮件(包括附件)
  9. 14_python基础—匿名函数lambda表达式
  10. mysql的游标处理_mysql 存储过程、游标及逐行处理的配合使用