【最大子矩阵——双指针 / 二分】

题目

双指针:

代码 

#include <bits/stdc++.h>
using namespace std;
const int N = 85, M = 1e5+10;
int g[N][M];
int n, m, lim;
int ans = 1;
int main()
{ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)cin >> g[i][j];cin >> lim;for(int a = 1; a <= n; a++){for(int b = a; b <= n; b++){int maxx = 0;int minn = 1e5+10;int minpos = 1;int maxpos = 1;for(int l = 1, r = 1; r <= m; r++){for(int k = a; k <= b; k++){maxx = max(maxx, g[k][r]);minn = min(minn, g[k][r]);if(maxx == g[k][r]) maxpos = r;if(minn == g[k][r]) minpos = r;}if(maxx - minn <= lim) ans = max(ans, (b - a + 1) * (r - l + 1));else{l = min(maxpos, minpos) + 1;maxx = 0;minn = 1e5+10;if(l <= r){for(int i = a; i <= b; i++){for(int j = l; j <= r; j++){maxx = max(maxx, g[i][j]);minn = min(minn, g[i][j]);if(maxx == g[i][j]) maxpos = j;if(minn == g[i][j]) minpos = j;}}}}}}}cout << ans;
}

另一个形式 

#include <bits/stdc++.h>
using namespace std;
const int N = 85, M = 1e5+10;
int g[N][M];
int n, m, lim;
int ans = 1;int main()
{ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)cin >> g[i][j];cin >> lim;// 遍历所有可能的起点行和终点行for(int a = 1; a <= n; a++){for(int b = a; b <= n; b++){// 使用滑动窗口法对每一列进行计算int l = 1;int maxx = g[a][1];int minn = g[a][1];int posmax = 1;int posmin = 1;for(int r = 1; r <= m; r++){// 更新当前窗口的最大值和最小值for(int k = a; k <= b; k++){maxx = max(maxx, g[k][r]);minn = min(minn, g[k][r]);if(maxx == g[k][r]) posmax = r;if(minn == g[k][r]) posmin = r;}while (maxx - minn > lim && l <= r){l = min(posmax, posmin) + 1;// 重新计算当前窗口的最大值和最小值maxx = g[a][l];minn = g[a][l];for(int k = a; k <= b; k++){for(int j = l; j <= r; j++){maxx = max(maxx, g[k][j]);minn = min(minn, g[k][j]);if(maxx == g[k][j]) posmax = j;if(minn == g[k][j]) posmin = j;}}}// 更新最大面积ans = max(ans, (b - a + 1) * (r - l + 1));}}}cout << ans;
}

二分 + 单调队列:

#include <bits/stdc++.h>
using namespace std;
const int N = 85, M = 1e5+10;
int g[N][M], qmax[M], qmin[M], hmax, hmin, tmax, tmin;
int colmax[M], colmin[M];
int ans = 1;
int n, m, lim;
bool check(int x)
{hmax = hmin = 0, tmax = tmin = -1;for(int i = 1; i <= m; i++){while(hmax <= tmax && colmax[qmax[tmax]] <= colmax[i]) tmax--;while(hmin <= tmin && colmin[qmin[tmin]] >= colmin[i]) tmin--;qmax[++tmax] = i;qmin[++tmin] = i;if(qmax[hmax] < i - x + 1) hmax++;if(qmin[hmin] < i - x + 1) hmin++;if(i >= x && colmax[qmax[hmax]] - colmin[qmin[hmin]] <= lim) return true;}return false;
}
int get()
{int l = 1, r = m;while(l < r){int mid = (l + r + 1) >> 1;if(check(mid)) l = mid;else r = mid-1;}if(check(l)) return l;return 0;
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++)cin >> g[i][j];}cin >> lim;for(int i = 1; i <= n; i++){for(int t = 1; t <= m; t++){colmax[t] = 0;colmin[t] = 1e6;}for(int j = i; j <= n; j++){for(int t = 1; t <= m; t++){colmax[t] = max(colmax[t], g[j][t]);colmin[t] = min(colmin[t], g[j][t]);}int maxlen = get();ans = max(ans, maxlen * (j - i + 1));}}cout << ans;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 网络编程概述

网络编程概述 Java是Internet上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程序员能够很容易开发常见的网络应用程序。 Java提供了网络类库&#xff0c;可以实现无痛的网络连接&#xff0c;联网的底层细节被隐藏在Java的本机安装系统里&#xff0…

内网渗透-隧道判断-SSH-DNS-icmp-smb-上线linux-mac

1.通道判断 #SMB 隧道&通讯&上线 判断&#xff1a;445 通讯 上线&#xff1a;借助通讯后绑定上线 通讯&#xff1a;直接 SMB 协议通讯即可 #ICMP 隧道&通讯&上线 判断&#xff1a;ping 命令 上线&#xff1a;见前面课程 通讯&#xff1a;其他项…

【优选算法篇】分治乾坤,万物归一:在重组中窥见无声的秩序

文章目录 分治专题&#xff08;二&#xff09;&#xff1a;归并排序的核心思想与进阶应用前言、第二章&#xff1a;归并排序的应用与延展2.1 归并排序&#xff08;medium&#xff09;解法&#xff08;归并排序&#xff09;C 代码实现易错点提示时间复杂度和空间复杂度 2.2 数组…

【微软:多模态基础模型】(3)视觉生成

欢迎关注【youcans的AGI学习笔记】原创作品 【微软&#xff1a;多模态基础模型】&#xff08;1&#xff09;从专家到通用助手 【微软&#xff1a;多模态基础模型】&#xff08;2&#xff09;视觉理解 【微软&#xff1a;多模态基础模型】&#xff08;3&#xff09;视觉生成 【微…

netcore Kafka

一、新建项目KafakDemo <ItemGroup><PackageReference Include"Confluent.Kafka" Version"2.6.0" /></ItemGroup> 二、Program.cs using Confluent.Kafka; using System; using System.Threading; using System.Threading.Tasks;names…

什么是C++内联函数,它的作用是什么?以及和宏定义的区别

内联函数定义 内联函数是在 C 中定义的一种特殊类型的函数。通过使用 inline 关键字&#xff0c;请求编译器在每个调用点直接插入函数体的代码&#xff0c;没有函数压栈&#xff08;函数压栈&#xff1a;在函数调用的时候将函数的相关信息和局部变量等数据储存在栈上的过程&am…

工业生产安全-安全帽第一篇-opencv及java开发环境搭建

一.背景 公司是非煤采矿业&#xff0c;核心业务是采选&#xff0c;大型设备多&#xff0c;安全风险因素多。当下政府重视安全&#xff0c;头部技术企业的安全解决方案先进但价格不低&#xff0c;作为民营企业对安全投入的成本很敏感。利用我本身所学&#xff0c;准备搭建公司的…

详细的oracle rac维护命令集合

一、查看命令 所有实例和服务的状态 $srvctl status database -d orcl Instance orcl1 is running on node db1 Instance orcl2 is running on node db2 单个实例的状态 $ srvctl status instance -d orcl -i orcl2 Instance orcl2 is running on node db2 单个节点的应用程序…

fastadmin多个表crud连表操作步骤

1、crud命令 php think crud -t xq_user_credential -u 1 -c credential -i voucher_type,nickname,user_id,voucher_url,status,time --forcetrue2、修改控制器controller文件 <?phpnamespace app\admin\controller;use app\common\controller\Backend;/*** 凭证信息…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-26

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…

Essential Cell Biology--Fifth Edition--Chapter one (8)

1.1.4.6 The Cytoskeleton [细胞骨架] Is Responsible for Directed Cell Movements 细胞质基液不仅仅是一种无结构的化学物质和细胞器的混合物[soup]。在电子显微镜下&#xff0c;我们可以看到真核细胞的细胞质基液是由长而细的丝交叉而成的。通常[Frequently]&#xff0c;可…

RK3568 Linux 系统加系统运行指示灯

一、dts配置 gpio-leds {status = "okay";compatible = "gpio-leds";work-led {gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>

C++11(六)----包装器function和bind

文章目录 包装器&#xff1a;function包装器&#xff1a;bind 包装器&#xff1a;function function接口介绍 在头文件<functional>中 语法&#xff1a;function的语法比较特殊 function<返回值(参数)> 自定义变量名 要被包装的可调用对象 class Plus { public:…

店铺推推-项目测试用例设计(Xmind)

项目介绍&#xff1a; 技术栈: Spring BootMyBatisRedis项目描述&#xff1a; 项目旨在为消费者提供一个公平、公开、透明的平台&#xff0c;让消费者能够基于真实的消费体验对店铺进行评价和 推荐&#xff0c;并为其他潜在消费者提供参考。同时&#xff0c;店铺推推也是为商家…

c++--------《set 和 map》

c--------《set 和 map》 1 set系列的使⽤1.1 set类的介绍1.2 set的构造和迭代器1.3 set重要接口 2 实现样例2.1: insert和迭代器遍历使⽤样例&#xff1a;2.2: find和erase使⽤样例&#xff1a; 练习3.map系列的使用3.1 map类的介绍3.1.1 pair类型介绍 3.2 map的数据修改3.3mu…

GIS融合之路(八)-如何用Cesium直接加载OSGB文件(不用转换成3dtiles)

系列传送门&#xff1a; 山海鲸可视化&#xff1a;GIS融合之路&#xff08;一&#xff09;技术选型CesiumJS/loaders.gl/iTowns? 山海鲸可视化&#xff1a;GIS融合之路&#xff08;二&#xff09;CesiumJS和ThreeJS深度缓冲区整合 山海鲸可视化&#xff1a;GIS融合之路&…

cooper+隐含数+2元cooper

发现群里一个题&#xff0c;应该是几天前一个比赛的。作了一下午。 from Crypto.Util.number import * import os from hashlib import * from random import * p getPrime(512) q getPrime(512) n p*q m bytes_to_long(os.urandom(20)) x pow(m,p,n) y pow(m,q,n)with…

QQ 小程序已发布,但无法被搜索的解决方案

前言 我的 QQ 小程序在 2024 年 8 月就已经审核通过&#xff0c;上架后却一直无法被搜索到。打开后&#xff0c;再在 QQ 上下拉查看 “最近使用”&#xff0c;发现他出现一下又马上消失。 上线是按正常流程走的&#xff0c;开发、备案、审核&#xff0c;没有任何违规&#xf…

word 中长公式换行 / 对齐 | Mathtype 中长公式换行拆分 | latex 中长公式换行

注&#xff1a;本文为 “word 中长公式换行 / 对齐 | Mathtype 中长公式换行拆分 | latex 中长公式换行” 相关专题文章合辑。 未整理去重。 “公式较长时最好在等号 “&#xff1d;” 处转行&#xff0c;如难实现&#xff0c;则可在&#xff0b;、&#xff0d;、、 运算符号处…

【优选算法 — 滑动窗口】串联所有单词的子串 最小覆盖子串

串联所有单词的子串 串联所有单词的子串 题目描述 题目解析 算法原理 以示例一为例&#xff0c;一定要记得&#xff0c;words中的每一个字符串长度相同&#xff0c;所以我们可以根据 words 中的每一个字符串的长度length&#xff0c;将 s 这个字符串以 length 个为一组来…