开b组单调队列,分别维护此时某一列中的最大/最小值

然后我每次把它们的头取出来,塞到维护行的单调队列里,就是n*n的最大/最小值

 1 #include<bits/stdc++.h>
 2 #define pa pair<int,int>
 3 #define CLR(a,x) memset(a,x,sizeof(a))
 4 using namespace std;
 5 typedef long long ll;
 6 const int maxn=1e3+10;
 7
 8 inline ll rd(){
 9     ll x=0;char c=getchar();int neg=1;
10     while(c<'0'||c>'9'){if(c=='-') neg=-1;c=getchar();}
11     while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
12     return x*neg;
13 }
14
15 struct Q{
16     int q[maxn][2],h,t;
17     inline void psh(int x,int y,bool b){
18         while(h&&h>=t&&(b?q[h][0]<=x:q[h][0]>=x)) h--;
19         q[++h][0]=x,q[h][1]=y;
20         if(!t) t=h;
21     }
22     inline int pop(int lim){
23         while(h>t&&q[t][1]<=lim) t++;
24         return q[t][0];
25     }
26     inline void clr(){h=t=0;}
27 }ama[maxn],ami[maxn],bma,bmi;
28 int N,A,B,arr[maxn][maxn];
29
30 int main(){
31     //freopen("","r",stdin);
32     int i,j,k;
33     A=rd(),B=rd();N=rd();
34     for(i=1;i<=A;i++){
35         for(j=1;j<=B;j++)
36             arr[i][j]=rd();
37     }
38     int ans=2e9;
39     for(i=1;i<=A;i++){
40         for(j=1;j<=B;j++){
41             ama[j].psh(arr[i][j],i,1);
42             ami[j].psh(arr[i][j],i,0);
43         }
44         if(i>=N){
45             bma.clr(),bmi.clr();
46             for(j=1;j<=B;j++){
47                 int a=ama[j].pop(i-N),b=ami[j].pop(i-N);
48                 bma.psh(a,j,1);
49                 bmi.psh(b,j,0);
50                 if(j>=N) ans=min(ans,bma.pop(j-N)-bmi.pop(j-N));
51             }
52         }
53     }
54     printf("%d\n",ans);
55     return 0;
56 }

转载于:https://www.cnblogs.com/Ressed/p/9950317.html

bzoj1047/luogu2216 理想的正方形 (单调队列)相关推荐

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

    这种在矩形里面找矩形有固定的套路,不是容斥就是左右上下延伸,这个题就是向左向右延伸.. 然后手玩优化发现邻位转移比暴力要好一些,可以用splay统计,但复杂度不对 然后由于每一行互不影响于是可以单行同 ...

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

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

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

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

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

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

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

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

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

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

  7. 提高篇 第五部分 动态规划 第5章 单调队列优化动态规划

    单调队列:是一种双端除列,其内部元素具有单调性. 最大队列 最小队列 操作: .插入:新元素插入队尾,删除除尾元素,直到找到插入后不会破坏单调性的为止. .获取最大(最小)值,访问队首元素. 单调队列 ...

  8. [BZOJ 1047] [HAOI2007] 理想的正方形 【单调队列】

    题目链接:BZOJ - 1047 题目分析 使用单调队列在 O(n^2) 的时间内求出每个 n * n 正方形的最大值,最小值.然后就可以直接统计答案了. 横向有 a 个单调队列(代码中是 Q[1] ...

  9. [HAOI2007] 理想的正方形

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

最新文章

  1. 数据中心新认证出现,UPTIME面临挑战
  2. 超优 Vue+Element+Spring 中后端解决方案
  3. php读取xml的值,PHP读取XML 值
  4. Boost.Signals 的文档/查看示例
  5. 在 NetBeans IDE 中设计 Swing GUI
  6. 网友提问:SAP FUNCTION使用cl_http_client POST REQUEST的问题
  7. yii2史上最简单式安装教程,没有之一
  8. mysql gid_mysql主从复制5.6基于GID及多线程的复制笔记
  9. wpf中左侧导航的实现
  10. react+wabpack 搭建
  11. 【数据结构和算法笔记】:树的概念和性质总结
  12. 证书格式简介及不同格式之间的转换方式
  13. 使用Myvatis Generator自动创建项目代码
  14. CIO如何做好灾难恢复/数据外泄的业务连续性计划?
  15. fanuc机器人自动程序前怎么回原点_FANUC机器人宏程序自动运行的方法及启动宏程序的步骤教程...
  16. html 恶意广告,电脑自动弹出恶意广告怎么处理
  17. MongoDB的多表关联查询
  18. 专业的在线考试系统,快考题,全面聚集多场景考试业务
  19. Intel VT学习笔记(三)—— VMCS(上)
  20. 【阅读理解】深入移动端的适配-详尽篇

热门文章

  1. ubuntu 16.04下git的安装与使用
  2. IDC发布2017年中国智慧城市IT十大预测
  3. AWS手动创建VPC
  4. HTTP协议是无状态协议,怎么理解
  5. Windows Phone Developer Registration 开发人员无法连接注册解决
  6. python 图像分析 边框_Python 去除图片纯色边框(qbit)
  7. (11)vue.js 指令(3)
  8. JS节点树的一个实例
  9. ES6/06/ES6简介,ES6新增语法,let声明变量,const声明常量,var,let和const总结,数组解构,对象解构,箭头函数,剩余参数
  10. 被坑了 | 那个写公众号,开网店的小小,被花式坑了!