题意:有一个n * n的网格,每个网格中间有一颗树,你知道每棵树的高,你可以选择一个矩形区域把里面的树都围起来,但是矩形区域里面任意两棵树的高度差的绝对值不超过m,问这个矩形的最大面积是多少?

思路:前两天的牛客多校有一个最大子矩形问题,当时用的扫描线 + 单调栈过的,结果场上想了半天灭结果QAQ。这个题有限制条件就不好那么做。注意到题目中的信息,可以用O(n ^ 3)的算法做,如果我们枚举矩阵的左上角和右下角是O(n ^ 4),而且没什么优化手段,不行。但是我们转化一下思路,我们枚举矩形的上边界和下边界以及右边界,我们想一下有没有办法在均摊O(1)的时间内找到对应右边界最优的左边界。怎么找左边界呢?首先我们得判断当前左边界和其它三个边界围成的矩形中最大值和最小值的差有没有超过m,如果没有说明是合法的。维护区间的最大最小值,有各种数据结构,但是单调队列是性价比最高的,因为每次右边界只增加1,和单调队列契合度很高,还可以做到均摊O(1)。那么,我们维护一个最小值和一个最大值的单调队列以及左边界。右边界移动一次后,将上下边界之间的右边界所在列的最小值和最大值分辨压入两个单调队列,如果当前矩形内的差值大于m,就移动左边界。如果单调队列队首位置小于左边界了就pop,更新答案。

代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 510;
int q1[maxn], q2[maxn], l1, l2, r1, r2;
int mi[maxn], mx[maxn], a[maxn][maxn];
int main() {
int T, n, m;
scanf("%d", &T);
while(T--) {
int ans = 0;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
scanf("%d", &a[i][j]);
}
for (int i = 1; i <= n; i++) {
memset(mi, 0x3f, sizeof(mi));
memset(mx, 0, sizeof(mx));
for (int j = i; j <= n; j++) {
l1 = l2 = 1, r1 = r2 = 0;
int pos = 1;
for (int k = 1; k <= n; k++) {
mi[k] = min(mi[k], a[j][k]);
mx[k] = max(mx[k], a[j][k]);
while(l1 <= r1 && mi[q1[r1]] > mi[k]) r1--;
q1[++r1] = k;
while(l2 <= r2 && mx[q2[r2]] < mx[k]) r2--;
q2[++r2] = k;
while(pos <= k && mx[q2[l2]] - mi[q1[l1]] > m) {
pos++;
if(q1[l1] < pos) l1++;
if(q2[l2] < pos) l2++;
}
if(l1 <= r1 && l2 <= r2) {
ans = max(ans, (j - i + 1) * (k - pos + 1));
}
}
}
}
printf("%d\n", ans);
}
}

  

2019HDU多校训练第三场 Planting Trees 暴力 + 单调队列优化的更多相关文章

  1. HDU6578 2019HDU多校训练赛第一场 1001 (dp)

    HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...

  2. HDU6579 2019HDU多校训练赛第一场1002 (线性基)

    HDU6579 2019HDU多校训练赛第一场1002 (线性基) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6579 题意: 两种操作 1.在序列末 ...

  3. 牛客网多校训练第三场 C - Shuffle Cards(Splay / rope)

    链接: https://www.nowcoder.com/acm/contest/141/C 题意: 给出一个n个元素的序列(1,2,...,n)和m个操作(1≤n,m≤1e5),每个操作给出两个数p ...

  4. 牛客网多校训练第三场 A - PACM Team(01背包变形 + 记录方案)

    链接: https://www.nowcoder.com/acm/contest/141/A 题意: 有n(1≤n≤36)个物品,每个物品有四种代价pi,ai,ci,mi,价值为gi(0≤pi,ai, ...

  5. 2019牛客多校训练第三场H.Magic Line(思维)

    题目传送门 大致题意: 输入测试用例个数T,输入点的个数n(n为偶数),再分别输入n个不同的点的坐标,要求输出四个整数x1,y1,x2,y2,表示有一条经过点(x1,y1),(x2,y2)的直线将该二 ...

  6. 2019牛客多校训练第三场B.Crazy Binary String(思维+前缀和)

    题目传送门 大致题意: 输入整数n(1<=n<=100000),再输入由n个0或1组成的字符串,求该字符串中满足1和0个数相等的最长子串.子序列. sample input: 801001 ...

  7. 2019牛客多校第三场F Planting Trees(单调队列)题解

    题意: 求最大矩阵面积,要求矩阵内数字满足\(max - min < m\) 思路: 枚举上下长度,在枚举的时候可以求出每一列的最大最小值\(cmax,cmin\),这样问题就变成了求一行数,要 ...

  8. HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分)

    HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分) 传送门:http://acm.hdu.edu.cn/showproblem.php? ...

  9. 2019牛客暑期多校训练营(第三场)- F Planting Trees

    题目链接:https://ac.nowcoder.com/acm/contest/883/F 题意:给定n×n的矩阵,求最大子矩阵使得子矩阵中最大值和最小值的差值<=M. 思路:先看数据大小,注 ...

随机推荐

  1. spring整合消息队列rabbitmq

    ps:本文只是简单一个整合介绍,属于抛砖引玉,具体实现还需大家深入研究哈.. 1.首先是生产者配置 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...

  2. 最强CP!阿里云联手支付宝小程序如何助力双11?

    作为首次“全面上云”的双11,阿里云征服了每秒订单峰值54.4万笔的世界新记录.正是在阿里云的保驾护航下,即使访问量是平时的5到6倍,小程序也鲜少出现卡顿或者宕机的现象,“依靠阿里云,我们整个天猫双1 ...

  3. linux0.11内核源码——用户级线程及内核级线程

    参考资料:哈工大操作系统mooc 用户级线程 1.每个进程执行时会有一套自己的内存映射表,即我们所谓的资源,当执行多进程时切换要切换这套内存映射表,即所谓的资源切换 2.但是如果在这个进程中创建线程, ...

  4. LOJ 2303 「NOI2017」蚯蚓排队——链表+哈希表

    题目:https://loj.ac/problem/2303 想到合并的时候可以只考虑接口附近的50个,但不太会分析复杂度,而且没有清楚地想到用哈希值对应个数. 看了题解才会…… 一直想用 splay ...

  5. PWA 应用

    1. 使用例子,vue官网,在手机浏览器器打开时,保存在桌面那个应用.还有饿了么网站也是PWA应用.

  6. Spring CGLlB动态代理

    JDK 动态代理使用起来非常简单,但是它也有一定的局限性,这是因为 JDK 动态代理必须要实现一个或多个接口,如果不希望实现接口,则可以使用 CGLIB 代理. CGLIB(Code Generati ...

  7. Menu [D3D9 Source]

    源代码下载地址:http://download.csdn.net/detail/wd844125365_/8008779

  8. Map-Amap:货运解决方案

    ylbtech-Map-Amap:货运解决方案 1.返回顶部 1. http://lbs.amap.com/smart/truck/ 2. 2.返回顶部 1. 2. 3.返回顶部   4.返回顶部   ...

  9. 禁止修改input内容

    有什么问题请到<a href='/bbs/index.asp?boardid=2'>论坛</a>中发表<br> <!--# 特效来源:http://www.o ...

  10. 0.OpenCV框架

    reference: https://docs.opencv.org/4.1.2/ 基本使用 1.图片和视频,读写(2,8) 2.OpenCV基本数据类型(3) 3.OpenCV大型数据类型及操作:图 ...