bzoj1047/luogu2216 理想的正方形 (单调队列)
开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 理想的正方形 (单调队列)相关推荐
- bzoj1047 [HAOI2007]理想的正方形 单调队列
这种在矩形里面找矩形有固定的套路,不是容斥就是左右上下延伸,这个题就是向左向右延伸.. 然后手玩优化发现邻位转移比暴力要好一些,可以用splay统计,但复杂度不对 然后由于每一行互不影响于是可以单行同 ...
- P2216 理想的正方形 单调队列 (二维)
题目链接:https://www.luogu.org/problem/P2216 题意:求给定n*m的矩形中所有k*k的正方形块中最大值最小值之差(极差)最小 哇,大神的思路真的很帅 单调队列对每一行 ...
- BZOJ 1047 理想的正方形(单调队列)
刚开始用二维RMQ直接给超内存了... 用单调队列可以做到O(n^2)的复杂度.具体是先把每行用单调队列处理一下.再把处理后的用列单调队列处理下. # include <cstdio> # ...
- [HAOI2007] 理想的正方形 (单调队列)
题目链接 Solution MD,经过这道题,算是掌握单调队列了... 可以先预处理出点 \((i,j)\) 往上 \(n\) 的最大值和最小值. 然后再横着做一遍单调队列即可. Code #incl ...
- BZOJ 1047: [HAOI2007]理想的正方形 单调队列瞎搞
题意很简明吧? 枚举的矩形下边界和右端点即右下角,来确定矩形位置: 每一个纵列开一个单调队列,记录从 i-n+1 行到 i 行每列的最大值和最小值,矩形下边界向下推移的时候维护一下: 然后在记录的每一 ...
- AcWing1091.理想的正方形(单调队列DP)
题目传送门 有一个 a×b 的整数组成的矩阵,现请你从中找出一个 n×n 的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入格式 第一行为三个整数,分别表示 a,b,n 的值: 第二行至 ...
- 提高篇 第五部分 动态规划 第5章 单调队列优化动态规划
单调队列:是一种双端除列,其内部元素具有单调性. 最大队列 最小队列 操作: .插入:新元素插入队尾,删除除尾元素,直到找到插入后不会破坏单调性的为止. .获取最大(最小)值,访问队首元素. 单调队列 ...
- [BZOJ 1047] [HAOI2007] 理想的正方形 【单调队列】
题目链接:BZOJ - 1047 题目分析 使用单调队列在 O(n^2) 的时间内求出每个 n * n 正方形的最大值,最小值.然后就可以直接统计答案了. 横向有 a 个单调队列(代码中是 Q[1] ...
- [HAOI2007] 理想的正方形
洛谷题目链接:[HAOI2007]理想的正方形 题目描述 有一个ab的整数组成的矩阵,现请你从中找出一个nn的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行 ...
最新文章
- 数据中心新认证出现,UPTIME面临挑战
- 超优 Vue+Element+Spring 中后端解决方案
- php读取xml的值,PHP读取XML 值
- Boost.Signals 的文档/查看示例
- 在 NetBeans IDE 中设计 Swing GUI
- 网友提问:SAP FUNCTION使用cl_http_client POST REQUEST的问题
- yii2史上最简单式安装教程,没有之一
- mysql gid_mysql主从复制5.6基于GID及多线程的复制笔记
- wpf中左侧导航的实现
- react+wabpack 搭建
- 【数据结构和算法笔记】:树的概念和性质总结
- 证书格式简介及不同格式之间的转换方式
- 使用Myvatis Generator自动创建项目代码
- CIO如何做好灾难恢复/数据外泄的业务连续性计划?
- fanuc机器人自动程序前怎么回原点_FANUC机器人宏程序自动运行的方法及启动宏程序的步骤教程...
- html 恶意广告,电脑自动弹出恶意广告怎么处理
- MongoDB的多表关联查询
- 专业的在线考试系统,快考题,全面聚集多场景考试业务
- Intel VT学习笔记(三)—— VMCS(上)
- 【阅读理解】深入移动端的适配-详尽篇
热门文章
- ubuntu 16.04下git的安装与使用
- IDC发布2017年中国智慧城市IT十大预测
- AWS手动创建VPC
- HTTP协议是无状态协议,怎么理解
- Windows Phone Developer Registration 开发人员无法连接注册解决
- python 图像分析 边框_Python 去除图片纯色边框(qbit)
- (11)vue.js 指令(3)
- JS节点树的一个实例
- ES6/06/ES6简介,ES6新增语法,let声明变量,const声明常量,var,let和const总结,数组解构,对象解构,箭头函数,剩余参数
- 被坑了 | 那个写公众号,开网店的小小,被花式坑了!