Description

求一个 n×mn \times mn×m 的网格图中,面积最大的矩形,满足平均值大于 kkk。

1≤n,m≤300,1≤ai≤2×1051 \leq n, m \leq 300, 1 \leq a_i \leq 2 \times 10^51≤n,m≤300,1≤ai​≤2×105

Solution

将输入的矩阵每个元素减去 kkk ,转换成矩阵之和为正。先预处理二维前缀和。

枚举左右边界的横坐标,并枚举下边界的纵坐标,对于每个 jjj,它对应的最大的上边界坐标为满足 sk<sjs_k < s_jsk​<sj​ 的最小的 kkk。可以发现单调性,所以在从小到大枚举 jjj 的同时维护一个递减单调队列,然后在单调队列找最小的 kkk 即可。

O(n3log⁡n)O(n^3 \log n)O(n3logn)

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 500 + 5;
int q[N], a[N][N];
ll s[N][N], c[N];
int n, m, k, head, ans, K;
int main() {scanf("%d%d%d", &n, &m, &K);for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++) {scanf("%d", &a[i][j]); a[i][j] -= K; s[i][j] = s[i][j - 1] + a[i][j];}for (int i = 1; i <= m; i++)for (int j = i; j <= m; j++) {head = q[0] = c[0] = 0;for (int k = 1; k <= n; k++) {c[k] = c[k - 1] + s[k][j] - s[k][i - 1];if (c[k] < c[q[head]]) q[++head] = k;}for (int k = n; k; k--) {while (head && c[k] >= c[q[head - 1]]) head--;ans = max(ans, (k - q[head]) * (j - i + 1));}}printf("%d\n", ans);return 0;
}

ZR859 坤坤的篮球场 (单调队列)相关推荐

  1. 单调队列多重背包时间复杂度O(vn)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 多重背包问题: 有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件.怎样装才能使背包内的物品总价值最大? 网 ...

  2. 洛谷 P2219修筑绿化带 二维单调队列~

    题目链接:https://www.luogu.org/problem/P2219 emmm调了一个上午+中午,fan 题意:从N*M的中找到一个a*b的大矩形和减去a*b中的一个与之不重边界的c*d的 ...

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

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

  4. 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]

    题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈s​v(e)​ ...

  5. 解题报告:Fake Maxpooling(单调队列求矩阵的和)

    我们不妨先把这个问题中二维的矩阵简化成一维的数列.那么现在的问题就变成了一个求连续的滑动窗口最值问题:给出一个长度为n的数列和一个长度为k(k<n)的窗口,记录滑动窗口位于每个位置下的下的最大值 ...

  6. 0x12.基本数据结构 — 队列与单调队列

    目录 一.队列 0.UVA540 团体队列 Team Queue 1.AcWing 133. 蚯蚓(模拟优先队列) 二 .单调队列 0.AcWing 135. 最大子序和(单调队列) 1.luogu ...

  7. 【题解】P1419 寻找段落(二分+单调队列)难度⭐⭐⭐★

    P1419 寻找段落 首先二分答案,即:二分最大平均值. 我们将a全部减去mid,问题转化为判断是否存在一个长度在s~t范围内的区间它的和为正,如果有说明还有更大的平均值. 用前缀和和单调队列维护. ...

  8. 【数据结构】单调栈和单调队列 详解+例题剖析

    算法:单调栈和单调队列 一.单调栈和单调队列 二.单调栈例题 1.模板题入门 2.不懂不要急,看这道题 三.单调队列例题 1.入门 2.进阶 一.单调栈和单调队列 单调栈和单调队列与普通的栈,队列不同 ...

  9. HDU 5289 Assignment(单调队列)

    题意:给T足数据,然后每组一个n和k,表示n个数,k表示最大同意的能力差,接下来n个数表示n个人的能力,求能力差在k之内的区间有几个 分析:维护一个区间的最大值和最小值,使得他们的差小于k,于是採用单 ...

最新文章

  1. @HostListener 可接收的事件列表
  2. HTTP 错误 500.21 - Internal Server Error PageHandlerFactory-Integrated
  3. 红帽发布了下一代OpenShift Online
  4. ESP8266 wifi干扰、钓鱼实现
  5. JDBC学习笔记之JDBC简介
  6. 【译】C#9的候选功能
  7. JDK8的日期时间类1
  8. 前端学习(1933)vue之电商管理系统电商系统之优化树形控件
  9. 一个application多个 URL
  10. 使用 classList API
  11. 关闭弹框事件_关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法...
  12. python列表删除会出现一个错误 list index out of range
  13. [Crypto/CTF]CTF Crypto 包函数和工具总结[ 2021/10/30更新]
  14. 如何调整金格电子章服务器印章_【​金格统一电子印章平台V2.0】版本正式发布!...
  15. 人工智能在计算机领域的应用论文,人工智能应用领域论文 关于人工智能领域的大学论文...
  16. Maven实战(四)--坐标
  17. Native Instruments Guitar Rig 5 Player WiN-MAC 免费的电吉他效果器
  18. 使用css做水印效果
  19. Python, Python, Python
  20. CouchDB的简单使用

热门文章

  1. 使用TextCNN+Word2Vec实现简历文本分类(二)
  2. 第六章-过程封装(函数)代码实例(C++蓝豹子)
  3. windows10防火墙设置
  4. java+swagger+侵入,一种无侵入比swagger-ui兼容性更好更简单的API文档生成方案
  5. 夸奖对方代码写的好_夸奖别人画得好怎么写
  6. VBIDE.VBE的应用
  7. matlab如何制作振型动画_Matlab 实时动画制作示例
  8. 代表们的烦恼,骚扰电话终将被整治?
  9. 计算机word如何插入新列表,电脑word文档中怎么给表格自动添加序号?怎么增加表目录...
  10. loaderRunner 12 场景测试