开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. Fedora 7 播放器totem
  2. 第三十二课.脉冲神经网络SNN
  3. 牛客网 2018年全国多校算法寒假训练营练习比赛(第三场)D.小牛vs小客-博弈
  4. 接口中定义变量必须为public static final的原因
  5. 解决开机需按F1键问题方案
  6. [Codeforces]Codeforces Round #460 (Div. 2)
  7. 2018/7/8-纪中某C组题【jzoj1619,jzoj1620,jzoj1621,jzoj1622】
  8. 微信小程序踩坑(1):wx.showModal模态对话框中content换行
  9. AD模块电压采集电路
  10. 磁共振t1t2信号记忆顺口溜_核磁共振诊断报告中的T1T2信号是什么意思?
  11. pkl形式的数据集读取和可视化
  12. python爬考研_Python爬取考研必备单词
  13. 【计算机网络】网络层精选习题1(含联考真题)
  14. 寂寞与孤独是人生中两大财富
  15. vue2+element-ui实现表格分页显示
  16. 信息安全管理(CISP)—— 信息安全管理
  17. c++ 获得文本修改时间_Aha Lottie | 动态修改 Lottie 中的文本
  18. demo-定时移动鼠标(防止自动息屏还得用手按亮)
  19. 静态代码块、构造代码块、非法的前向引用
  20. SOA面向服务架构:通信逻辑与SOME/IP消息格式

热门文章

  1. 3d文件与html结合,js和HTML5怎么结合?
  2. service get list一般规范
  3. NIOS2随笔——BMP解码与VGA显示
  4. 利用 jQuery 克隆 Object
  5. ioctl 函数 参数 详解
  6. 100-48微软(运算)
  7. MsChart5 累计柱状图 分类统计
  8. 字节跳动暑期日常实习前端面试
  9. mysql筛选向导后返回原表_Navcat关于导出向导的常见问题!
  10. graphql是什么_什么是GraphQL?