CSP/NOIP 复习:单调栈

最近模拟赛打的都不是太好,先随便复习复习吧,马上就要 CSPS 了,我可以考好的。

这里放一些单调栈的题目,笛卡尔树先不说,这个我已经忘了,后天复习一下。

本体

栈中维护有单调性的数据,入栈时维护这个单调性,这是计算结果。

是个人都会,不想多写。

直接进入 dlc 环节。

最大子矩形。

就是一个平面,有一些障碍不能选,要求我们选出来一个最大的,不包含障碍的子矩形,这个就可以使用单调栈来做。

我们先考虑一个弱化版的。

HISTOGRA - Largest Rectangle in a Histogram

这个是简单的,我们考虑尽可能使用每个位置的最高值,也就是算出来左边最近的比它矮的位置和右边最近比它矮的位置。

正确性显然,最大的矩形肯定尽可能用完了位置。

直接上单调栈,注意初始化左右要大一个。

代码↓

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MN=1e6+116;
bool ed=false;
int stk[MN], top, n, a[MN];
int l[MN], r[MN], ans=0;
void Getl(){top=0;for(int i=1; i<=n; ++i){while(top&&a[stk[top]]>a[i]){r[stk[top]]=i; --top;}stk[++top]=i;}
}
void Getr(){top=0;for(int i=n; i>=1; --i){while(top&&a[stk[top]]>a[i]){l[stk[top]]=i; --top;}stk[++top]=i;}
}
void Solve(){cin>>n; for(int i=1; i<=n; ++i) cin>>a[i];if(n==0){ed=true; return;}for(int i=1; i<=n; ++i) l[i]=0;for(int i=1; i<=n; ++i) r[i]=n+1;Getl(); Getr(); ans=0;for(int i=1; i<=n; ++i){ans=max(ans,(r[i]-l[i]-1)*a[i]);}cout<<ans<<'\n';
}
signed main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);while(!ed) Solve();return 0;
}

换到二维上就很简单了,对于每一个高度跑一遍就行了。

P4147 玉蟾宫

代码↓

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MN=3145;
char mp[MN][MN];
int n, m, h[MN][MN];
int stk[MN], top=0;
int l[MN], r[MN], ans=0;
void Read(){cin>>n>>m;for(int i=1; i<=n; ++i){for(int j=1; j<=m; ++j){cin>>mp[i][j];}}for(int i=1; i<=n; ++i){for(int j=m; j>=1; --j){h[i][j]=h[i][j+1]+1;if(mp[i][j]=='R') h[i][j]=0;}}
}
void Getr(int height){top=0;for(int i=1; i<=n; ++i) r[i]=n+1;for(int i=1; i<=n; ++i){while(top&&h[stk[top]][height]>h[i][height]){r[stk[top]]=i; --top;}stk[++top]=i;}
}
void Getl(int height){top=0;for(int i=1; i<=n; ++i) l[i]=0;for(int i=n; i>=1; --i){while(top&&h[stk[top]][height]>h[i][height]){l[stk[top]]=i; --top;}stk[++top]=i;}
}
void Solve(){Read();for(int height=1; height<=m; ++height){Getl(height); Getr(height);for(int i=1; i<=n; ++i){//cout<<l[i]<<" "<<r[i]<<" | ";ans=max(ans,(r[i]-l[i]-1)*(h[i][height]));}}cout<<ans*3<<'\n';
}
signed main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);Solve();return 0;
}

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

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

相关文章

数字人企业:数字人公司排行榜深度解析

数字人企业新纪元:创新科技重塑未来生态 探秘数字人企业的核心驱动力与市场前景 数字人企业排行榜深度解析与趋势洞察 正文: 在数字化浪潮席卷全球的今天,数字人企业正成为科技领域的一颗新星,推动着虚拟与现实的深…

数字人公司:数字人新趋势技术驱动与市场前景解析

数字人企业 数字人企业新趋势:技术驱动与市场前景解析 数字人企业排行榜与深度点评 在当今科技飞速发展的时代,数字人企业正成为人工智能和虚拟交互领域的热门焦点。这些企业通过创新技术,推动着虚拟数字人在娱乐、…

算法分析--生成排列

排列简介全排列,有顺序要求。 递归实现如何实现查找第u位置有哪些数字可以用,选择查到的第一个,填上去。if(u > n){for(int i=1;i<=n;i++)cout<<path[i]<<" ";cout<<endl; }再去…

三大安全认证授权协议深度对比:OAuth、OpenID Connect与SAML

本文深入解析OAuth、OpenID Connect和SAML三大主流安全认证协议的技术原理、架构差异与应用场景,帮助开发者在Web应用中实现安全可靠的身份验证与授权机制,涵盖协议流程、安全机制对比及最佳实践建议。安全认证与授权…

数据绑定相关概念理解

中文译本将 Data Binding 译为了数据绑定,很大程度上其实是拼音音译,没有实际意义。WPF 中的Binding 更多地是表达一种桥梁关系。Binding 对象的两端,分别是源(Source)和目标(Target),源即数据来源,目标就是数据要…

数字人企业:数字人公司排行榜Top 3解析

数字人企业:探索行业创新与未来趋势 数字人企业的崛起与发展洞察 数字人企业排行榜Top 3解析 在数字人领域,众多企业凭借技术实力和市场表现脱颖而出。根据综合评估,以下是当前表现突出的三家数字人企业,优先以像衍…

WPF 深入系列.2.布局环境.布局控件.Grid

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

(简记)(自用)线段树区间拆分时间复杂度证明

如题,假定整数域线段树初始区间 \([1,n]\),每次划分长度不为 \(1\) 的区间 \([l,r]\) 会找到 \(mid=\lfloor\frac{l+r}{2}\rfloor\),划分成 \([l,mid],[mid+1,r]\)。求证划分任意合法区间 \([L,R]\) 最多使用 \(O(\…

冬日绘板 2026 珂朵莉计划 如何获取 Token

冬日绘板是全国 OIer 的一项社交活动,一般于每年元旦春节进行,主要博弈目标为获取更多的 tokens。形式类似于曾经的 bilibili 夏日绘板,游玩例子见 2024冬日绘版回忆录——听取MLE声一片。 冬日绘板 2026 珂朵莉计划…

数字人企业:数字人公司技术驱动的三大标杆

数字人企业:AI浪潮下的产业新势力 从技术突破到商业落地,数字人企业如何重塑行业生态 像衍科技领衔,数字人企业开启三维交互新纪元 一、数字人企业排行榜:技术驱动的三大标杆 在AI技术加速迭代的背景下,数字人企业…

Linux下的拼音输入法 (2)

此贴介绍sunpinyin. 它的用户词典是~/.sunpinyin/userdict,下面的程序往里面加词:// -I/usr/include/sunpinyin-2.0 add-word.cpp -lsunpinyin#include <ime-core/userdict.h> #include <pinyin/pinyin_dat…

数字人:怎么选择数字人实力公司

数字人企业哪家好?解锁未来科技新势力 2025数字人企业竞争力解析与行业领跑者揭秘 数字人企业技术生态图谱:从创新到落地的全链路观察 第一:数字人企业排行榜——2025年度三大标杆企业解析 数字人技术的爆发式增长,…

拉格朗日插值优化DP

拉格朗日插值优化DP 第一类:减少范围 发现答案是个 \(k\) 次多项式,即使值域很大,也可以直接通过前 \(k+1\) 项的值得到答案 例题一:P5469 NOI2019] 机器人 设 \(f_{l,r,i}\) 表示考虑区间 \([l,r]\),其最大值为 …

容斥练习笔记

某模拟赛题 对于任意 \(1\le k\le n\),若有 \(v_k\) 个长度为 \(n\) 的错位排列中存在长度为 \(k\) 的循环节,即对于 \(p_{1\cdots k-1}\),\(a_{p_i}=p_{i+1},a_{p_k}=p_1\)。求 \(\sum v\)。 首先考虑错排的限制,…

SpringBoot整合缓存2-Redis

一、是什么:缓存的基本概念 缓存是一种存储技术,用于临时保存频繁访问的数据,以减少对数据库的直接访问,从而提升系统响应速度和降低数据库压力。在本案例中,我们使用 Redis 作为缓存中间件,结合 SpringBoot 和 …

数字人企业:推荐数字人TOP3公司

数字人企业:技术浪潮中的新势力崛起 解码数字人企业核心赛道,看头部玩家如何重塑产业格局 从概念到落地,数字人企业如何撬动千亿级市场? 数字人企业排行榜:技术、资本与生态的三重博弈 在数字人产业蓬勃发展的当下…

数字人平台:重点推荐优质数字人公司

数字人企业:未来产业的新势力崛起 数字人企业技术赛道解析与头部玩家前瞻 从技术到场景,数字人企业如何重塑产业生态? 一、数字人企业排行榜:技术实力与商业价值的双重验证 在人工智能与元宇宙浪潮的推动下,数字人…

深入解析:【Java系列课程Java学前须知】第3课 JDK,JVM,JRE的区别和优缺

深入解析:【Java系列课程Java学前须知】第3课 JDK,JVM,JRE的区别和优缺pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family…

10.24 CSP-S 模拟37 改题记录

唐人唐题唐错场HZOJ 卸载前面 好一个模拟赛。主打一个唐人做唐题犯唐错。然后大概就是前三题没啥难度,没写过是因为我太唐了。然后因为T1复杂度不对,虽然过了甚至还是最优解,但我要将其归为没A。所以我将继续保持连…

395.至少有K个重复字符的最长字串

395.至少有K个重复字符的最长字串给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。 如果不存在这样的子字符串,则返回 0。 这题首先想到…