题目https://ac.nowcoder.com/acm/contest/883/F

题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m

思路:首先我们仔细观察范围,我们就知道可以n^3,前面这题我(看付队博客)讲过求一个最大的什么矩阵就是分两种情况,

第一种:枚举上下边界,转化为一维,复杂度n^3

第二种:枚举下边界,转化为高楼问题,复杂度n^2

这里显然复杂度可以n^3,我们就想一下三场循环,这题实际上就是找到矩阵内的最大值最小值

第一层肯定是枚举上边界

第二层我们要边枚举下边界边求当前列的最大最小值

第三层 这里其实也就是转化为了一个一维的题,求一个序列内,每个有一个最大最小值,任意两点差值不超过m,然后问最大连续长度是多少

这个其实很简单,我们用两个单调队列分别记录最大最小值,然后尺取过去即可,这里必须手动模拟队列,不然会超时。(亲测)

附:我们第一层枚举上边界,第二层枚举下边界是有特殊原因的,这样方便O(n)求出所有最大值

#include<bits/stdc++.h>
#define maxn 505
#define mod 1000000007
using namespace std;
typedef long long ll;
ll n,m;
ll mp[maxn][maxn];
ll mx[maxn],mn[maxn];
ll qn[maxn],qx[maxn];
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%lld%lld",&n,&m);
ll ans=;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
scanf("%lld",&mp[i][j]);
}
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
mx[j]=-mod;
mn[j]=mod;
}
for(int j=i;j<=n;j++){
for(int k=;k<=n;k++){
mx[k]=max(mx[k],mp[j][k]);
mn[k]=min(mn[k],mp[j][k]);
}
ll l=,r=,f1=,f2=,b1=,b2=;
while(r<=n){
while(f1<=b1&&mx[r]>=mx[qx[b1]]) b1--;
qx[++b1]=r;
while(f2<=b2&&mn[r]<=mn[qn[b2]]) b2--;
qn[++b2]=r;
if(mx[qx[f1]]-mn[qn[f2]]<=m){
ans=max((r-l+)*(j-i+),ans);
r++;
continue;
}
ans=max((r-l)*(j-i+),ans);
while(l<=r&&mx[qx[f1]]-mn[qn[f2]]>m){
l++;
while(f1<=b1&&qx[f1]<l) f1++;
while(f2<=b2&&qn[f2]<l) f2++;
}
r++;
}
}
}
printf("%lld\n",ans);
}
return ;
}

2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)的更多相关文章

  1. [题解] 2019牛客暑期多校第三场H题 Magic Line

    题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意:二维平面上有n个不同的点,构造一条直线把平面分成两个点数相同的部分. 题解:对这n个点以x为第一关键 ...

  2. 【2019牛客暑期多校第三场】J题LRU management

    题目链接 题意 好吧,这道题我其实看都没看过,队友跟我说了说这道题是模拟题,卡时间.然后我就上了-- 大致就是维护一个线性表,然后有两种操作:插入.查询 插入时,如果这个值(string)之前出现过, ...

  3. 2019牛客暑期多校训练营(第三场) F.Planting Trees(单调队列)

    题意:给你一个n*n的高度矩阵 要你找到里面最大的矩阵且最大的高度差不能超过m 思路:我们首先枚举上下右边界,然后我们可以用单调队列维护一个最左的边界 然后计算最大值 时间复杂度为O(n*n*n) # ...

  4. 2019 牛客暑期多校 第八场 A All-one Matrices (单调栈+前缀和)

    题目:https://ac.nowcoder.com/acm/contest/888/A 题意:找全1矩阵的个数,并且这个全1矩阵不被其他全1矩阵包含 思路:这里引用付队说的话 -> { 这类问 ...

  5. 牛客多校第三场F Planting Trees 单调栈

    Planting Trees 题意 给出一个矩阵,求最大矩阵面积满足该矩阵中任2元素的绝对值之差小于等于M T<1000) (n<500)但是题目明示单组(n*3)可过 分析 又是矩阵问题 ...

  6. 牛客多校第三场 F Planting Trees

    牛客多校第三场 F Planting Trees 题意: 求矩阵内最大值减最小值大于k的最大子矩阵的面积 题解: 矩阵压缩的技巧 因为对于我们有用的信息只有这个矩阵内的最大值和最小值 所以我们可以将一 ...

  7. 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)

    题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...

  8. 2019牛客多校第三场 F.Planting Trees

    题目链接 题目链接 题解 题面上面很明显的提示了需要严格\(O(n^3)\)的算法. 先考虑一个过不了的做法,枚举右下角的\((x,y)\),然后二分矩形面积,枚举其中一边,则复杂度是\(O(n^3 ...

  9. 2019牛客暑期多校第六场题解ABDJ

    A.Garbage Classification 传送门 题意:给你两个串,第一个串s由小写字母组成,第二个串t由dwh组成,长度为26,分别表示字母a到z代表的字符.现在要你判断: 如果字符串中‘h ...

随机推荐

  1. 思维导图初体验——openstack

    RABBITMQ memcache keystone glance nova neutron horizon cinder ceph

  2. sysbench - 数据库功能及性能测试工具

    sysbench 的 GitHub 参考资料 1.0 之后的版本使用方法跟之前的有所区别,下面所有内容基于 1.0.9 版本. 另外,为了方便管理测试,最好不要通过命令直接运行测试,而是写成脚本自动化 ...

  3. WPF国际化方式1之资源文件

    先看效果吧,个人觉得由于MVVM模式的UI响应属性变化的特殊机制,资源文件和内存数据都是国际化不错的选择. 1.首先准备两个资源文件用来做中文和英文的转换使用,将程序中需要转换语言都弄成两个版本,分别 ...

  4. EL表达式(三)自定义 EL 表达式

    自定义EL函数(静态方法): 编写步骤: 1.编写一个Java类,提供一个静态方法 import java.util.List; public class GetLength { public sta ...

  5. 基于Select模型的Windows TCP服务端和客户端程序示例

    最近跟着刘远东老师的<C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台)>,Bilibili视频地址为C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台),重新复习下 ...

  6. [Python3 练习] 010 找出藏在字符串中的“密码”

    题目:找出藏在字符串中的"密码" (1) 描述 1) 题源 1 Python Challenge, level 3 2) 题源 2 小甲鱼老师的 Python 课程,第 20 讲课 ...

  7. ERROR [localhost-startStop-1] - Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/ap

    ERROR [localhost-startStop-1] - Context initialization failed org.springframework.beans.factory.Bean ...

  8. SAS去空格

    data test;       x="  aaa     bbb hahaha";       x1=compress(x);       x2=left(x);       p ...

  9. 断路器,AOP实现断路器模式 ------------Hystrix

    断路器:https://martinfowler.com/bliki/CircutiBreaker.html 核心思想: 在断路器对象中封装受保护的方法调用. 该断路器监控调用和断路情况 调用失败触发 ...

  10. 【五一qbxt】day7-1 引水入城

    [noip2010 洛谷p1514]引水入城 Before: 线段覆盖问题#1:(我们所需要的) 一个区间,若干条线段,现在求最少多少条线段覆盖满整个区间 区间长度8,可选的覆盖线段[2,6],[1, ...