题目链接

题意

有一个N2N^2N2的矩阵N∈(1,500)N \in (1,500)N∈(1,500),求一个最大的子矩阵使子矩阵中最大值和最小值差不超过M∈(0,105)M \in (0, 10^5)M∈(0,105),总的样例N3≤2.5×108N^3 \le 2.5 \times 10^8N3≤2.5×108

思路

枚举矩阵的上下界,然后枚举右端点,同时维护两个单调队列,最大值递增,最小值递减(这样能保证如果单调队列中头元素合法之后的都可以满足MMM的限制关系),这样就可以得到一个合法的最左边界。
复杂度:O(N3)O(N^3)O(N3)

#include <bits/stdc++.h>
const int maxn = 5e2 + 1;
const int inf = 0x3f3f3f3f;
using namespace std;
int a[maxn][maxn];
int up[maxn], down[maxn];
int q[maxn][2];
int main() {int T;cin >> T;while (T--) {int n, m;cin >> n >> m;for (int i = 1; i <= n; ++i) {for (int j = 1; j <= n; ++j) {cin >> a[i][j];}}int ans = 1;for (int i = 1; i <= n; ++i) { // 上界for (int j = 1; j <= n; ++j) {up[j] = -inf;down[j] = inf;}for (int j = i; j <= n; ++j) { // 下界for (int k = 1; k <= n; ++k) { // 更新列的最值up[k] = max(up[k], a[j][k]);down[k] = min(down[k], a[j][k]);}int l = 1, h0 = 0, h1 = 0, t0 = 1, t1 = 1;for (int r = 1; r <= n; ++r) { // 枚举右端点while (h0 >= t0 && down[q[h0][0]] >= down[r]) h0--; // 最大值递增while (h1 >= t1 && up[q[h1][1]] <= up[r]) h1--; // 最小值递减q[++h0][0] = q[++h1][1] = r;while (l <= r && up[q[t1][1]] - down[q[t0][0]] > m) { // 不满足m,左区间L++l++;while (t1 <= h1 && q[t1][1] < l) ++t1; // 更新队列头指针while (t0 <= h0 && q[t0][0] < l) ++t0;}ans = max(ans, (r-l+1) * (j-i+1));}}}cout << ans << endl;}return 0;
}

2019牛客暑期多校训练营(第三场)F - Planting Trees (枚举 + 单调队列)相关推荐

  1. 2019牛客暑期多校训练营 第三场 I Median

    传送门 链接:https://ac.nowcoder.com/acm/contest/883/I 来源:牛客网 JSB has an integer sequence a1,a2,-,ana_1, a ...

  2. 【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/H 来源:牛客网 题目描述 Given a N×MN \times MN×M binary matrix. ...

  3. 2019牛客暑期多校训练营(第一场)E-ABBA(dp)

    链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

  4. 2019牛客暑期多校训练营(第一场)

    传送门 参考资料: [1]:官方题解(提取码:t050 ) [2]:标程(提取码:rvxr ) [3]:牛客题解汇总 A.Equivalent Prefixes(单调栈) •题意 定义两个数组 u,v ...

  5. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  6. 【2019牛客暑期多校训练营(第二场)- E】MAZE(线段树优化dp,dp转矩阵乘法,线段树维护矩阵乘法)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/E?&headNav=acm 来源:牛客网 Given a maze with N rows an ...

  7. 【2019牛客暑期多校训练营(第二场)- F】Partition problem(dfs,均摊时间优化)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/F 来源:牛客网 Given 2N people, you need to assign each of ...

  8. 【2019牛客暑期多校训练营(第二场) - D】Kth Minimum Clique(bfs,tricks)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/D 来源:牛客网 Given a vertex-weighted graph with N vertice ...

  9. 【2019牛客暑期多校训练营(第一场) - A】Equivalent Prefixes(单调栈,tricks)

    题干: 链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Two arrays u and v each with m distinct elem ...

  10. 【2019牛客暑期多校训练营(第一场) - H】XOR(线性基,期望的线性性)

    题干: 链接:https://ac.nowcoder.com/acm/contest/881/H 来源:牛客网 Bobo has a set A of n integers a1,a2,-,ana1, ...

最新文章

  1. java400状态,java – HttpURLConnection:如何读取400响应的有效负载
  2. ip route-static 命令的参数
  3. 你必须知道的容器监控 (1) Docker自带子命令与Weave Scope
  4. leetcode No.21 合并两个有序链表
  5. mac vscode 背景半透明_给 vscode 添加半透明毛玻璃效果
  6. 一些关于直播间人货场的打造干货,直播电商新手必须要了解人货场的概念
  7. c++——block_type_is_valid怎么解决
  8. Zynq7000硬件开发之总体硬件架构设计
  9. 12 个开源后台管理系统
  10. 在线vip全网音乐搜索下载源码
  11. Windows开启ssh服务配合 IOS 快捷指令完成骚操作
  12. saltstack(九)returner
  13. javaSE之多线程vip插队
  14. 七牛云配置怎么配CDN
  15. linux下常用拷贝命令
  16. 国内Android源码下载
  17. 分布式 PostgreSQL 集群(Citus),分布式表中的分布列选择最佳实践
  18. 非CS背景,如何快速上手机器学习?
  19. [点云补全]-Point Cloud Completion by Skip-attention Network with Hierarchical Folding
  20. Win7 64位下使用masm

热门文章

  1. hadoop中如何动态更新集群队列和容量
  2. php数组array_push()和array_pop()以及array_shift()函数
  3. How to create a jump server in AWS VPC
  4. 新年奉献MVC+EF(CodeFirst)+Easyui医药MIS系统
  5. 兴趣记忆法(1)顺口溜记忆
  6. redis 报 error NOTAUTH Authentication required
  7. 中班音乐计算机反思,中班歌曲《不再麻烦好妈妈》活动反思
  8. 【数据结构与算法】之深入解析“逆波兰表达式求值”的求解思路与算法示例
  9. OpenGL ES之Swift使用GLSL语言渲染图片的显示
  10. G6 图可视化引擎——入门教程——绘制 Tutorial 案例