刚开始用二维RMQ直接给超内存了。。。

用单调队列可以做到O(n^2)的复杂度。具体是先把每行用单调队列处理一下。再把处理后的用列单调队列处理下。

# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <iostream>
# include <vector>
# include <queue>
# include <stack>
# include <map>
# include <set>
# include <cmath>
# include <algorithm>
using namespace std;
# define lowbit(x) ((x)&(-x))
# define pi acos(-1.0)
# define eps 1e-9
# define MOD 12345678
# define INF 1000000000
# define mem(a,b) memset(a,b,sizeof(a))
# define FOR(i,a,n) for(int i=a; i<=n; ++i)
# define FO(i,a,n) for(int i=a; i<n; ++i)
# define bug puts("H");
# define lch p<<1,l,mid
# define rch p<<1|1,mid+1,r
# define mp make_pair
# define pb push_back
typedef pair<int,int> PII;
typedef vector<int> VI;
# pragma comment(linker, "/STACK:1024000000,1024000000")
typedef long long LL;
int Scan() {int res=0, flag=0;char ch;if((ch=getchar())=='-') flag=1;else if(ch>='0'&&ch<='9') res=ch-'0';while((ch=getchar())>='0'&&ch<='9')  res=res*10+(ch-'0');return flag?-res:res;
}
void Out(int a) {if(a<0) {putchar('-'); a=-a;}if(a>=10) Out(a/10);putchar(a%10+'0');
}
const int N=1005;
//Code begin...int val[N][N], row_max[N][N], row_min[N][N], col_max[N][N], col_min[N][N], que[N], head, tail;int main ()
{int n, m, a;scanf("%d%d%d",&n,&m,&a);FOR(i,1,n) FOR(j,1,m) scanf("%d",&val[i][j]);FOR(i,1,n) {head=-1; tail=0;FOR(j,1,m) {while (head>=tail&&val[i][j]>=val[i][que[head]]) --head;que[++head]=j;if (que[head]-que[tail]>=a) ++tail;if (j>=a) row_max[i][j-a+1]=val[i][que[tail]];}head=-1; tail=0;FOR(j,1,m) {while (head>=tail&&val[i][j]<=val[i][que[head]]) --head;que[++head]=j;if (que[head]-que[tail]>=a) ++tail;if (j>=a) row_min[i][j-a+1]=val[i][que[tail]];}}FOR(j,1,m-a+1) {head=-1; tail=0;FOR(i,1,n) {while (head>=tail&&row_max[i][j]>=row_max[que[head]][j]) --head;que[++head]=i;if (que[head]-que[tail]>=a) ++tail;if (i>=a) col_max[i-a+1][j]=row_max[que[tail]][j];}head=-1; tail=0;FOR(i,1,n) {while (head>=tail&&row_min[i][j]<=row_min[que[head]][j]) --head;que[++head]=i;if (que[head]-que[tail]>=a) ++tail;if (i>=a) col_min[i-a+1][j]=row_min[que[tail]][j];}}int ans=INF;FOR(i,1,n-a+1) FOR(j,1,m-a+1) ans=min(ans,col_max[i][j]-col_min[i][j]);printf("%d\n",ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/lishiyao/p/6501358.html

BZOJ 1047 理想的正方形(单调队列)相关推荐

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

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

  2. [BZOJ 1047]理想的正方形

    Link: BZOJ 1047 传送门 Solution: (1)先横向用单调队列求出每个数左边$n$个数中的最值 (2)再纵向利用横向的结果用单调队列进行相同的操作 通过以上操作将$a*b$的矩阵转 ...

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

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

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

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

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

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

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

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

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

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

  8. BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 4750  Solved: 2145 [Sub ...

  9. BZOJ 1791 岛屿(环套树+单调队列DP)

    题目实际上是求环套树森林中每个环套树的直径. 对于环套树的直径,可以先找到这个环套树上面的环.然后把环上的每一点都到达的外向树上的最远距离作为这个点的权值. 那么直径一定就是从环上的某个点开始,某个点 ...

最新文章

  1. 六年级计算机word处理,六年级上信息技术教案Word大变身用Word制作网页河大版
  2. 【openfst样例2】Downcasing Text
  3. 12、INNER JOIN:内连接
  4. ds证据理论python实现_ALI模型理论以及Python实现
  5. 用户登录和注册的功能
  6. 手写一个promise用法_手写一个自己的 JavaScript Promise 类库
  7. 前端见微知著AngularJS备忘篇:温故而知新,可以为师矣
  8. 如何在Linux和Mac中清除Bash历史记录
  9. Linux查看分析任务计划命令,Linux任务计划crontab
  10. IDEA与Maven Java普通项目
  11. 利用sklearn对红酒数据集分类
  12. Mac上最好的白噪音软件:Noizio for Mac
  13. 计算机轻量级硬件性能测试软件推荐
  14. I2C 挂死,SDA一直为低问题分析
  15. Excel从入门到精通--基础篇
  16. 使用OCR技术将扫描PDF转换为可编辑的Word文档。
  17. python大数据分析标准库_大数据分析python库
  18. 计算机类论文答辩常见问题
  19. 用计算机解决问题听课笔记,《用计算机解决问题的一般步骤》说课稿
  20. day11【网络编程】

热门文章

  1. python数据结构推荐书-「算法与数据结构」从入门到进阶吐血整理推荐书单
  2. python怎么导入文本-Python 导入文件问题
  3. 英语和数学不好可以学python-Day2 怎么学 Python?
  4. 零基础自学python的app-零基础入门免费学Python 课程和APP推荐
  5. python读音有道词典-有道词典命令行快速翻译,Python编程的利器
  6. python pandas读取excel-Python使用Pandas读写EXCEL文件教程
  7. 学会python如何兼职-学会Python自动制作PPT,立马在兼职群接到一单
  8. python爬取慕课视频-python爬虫:爬取网站视频
  9. python读数据-python中如何读入数据
  10. python资料书-《Python数据分析与应用》——图书配套资料下载