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