当前位置: 首页 > news >正文

统计表类图形的最大面积

统计表类图形的最大面积

B4273 [蓝桥杯青少年组省赛 2023] 最大的矩形纸片 - 洛谷

问题概述

image

对于这样一个图,求它围成的矩形的最大面积

定义每一条矩形为一个图形

有这么一个思路:枚举每一个图形,以它的高作为围成矩形的高,那么问题就转换为求围成的矩形的边长。

设当前图形为第$i$个,现在向右推到第$j$个图形,第$k$个图形的高度为$h_k$

显然,只要$j$的高度大于等于$i$的高度,那么它一定能延伸到$j$,否则一定不能延伸到

那么问题再次变化,变为对于每一个$i$找到最近的$j$,使$h_i>h_j$。显然可以用单调栈维护。

这样又能延伸出两个小分支做法

1. 单向维护高度和长度

维护一个高度单调递增的栈,记录两个信息:高度累计宽度

我们不妨考虑一种情况:

设当前图形为第$i$个,现在向右推到第$j$个图形

如果此时$h_i>h_j$,那就意味着第$i$个图形无法向右扩展到第$j$个。但是反过来想,它意味着第$j$个图形向左扩展可以扩展到第$i$个位置。按照反向的思考,那么第$i$个位置向左扩展也一定是扩展到一个比它高的位置,那么这个位置,第$j$个位置也一定能扩展到。因此我们可以得出:第$i$个图形所能扩展的所有位置,第$j$个图形都能扩展到。同时第$j$个图形能在第$i$个图形的基础上再扩展$1$个(自身)

因此我们可以得出做法:在弹出栈顶时,更新当前长度并更新答案。入栈时,进入两个元素,该位置的高该位置的累计长度

计算面积

只在弹出栈顶时计算面积

此时知道:高度 = 栈顶高度,宽度 = 累计宽度

Code
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll N=1e6+10;
ll n,ans;
ll h[N];
struct node{ll w,h;
};
stack<node> q;
int main(){scanf("%lld",&n);for(ll i=1;i<=n;i++) scanf("%lld",&h[i]);ll len,res;for(int i=1;i<=n+1;i++){len=0;while(q.size()&&h[i]<=q.top().h){len+=q.top().w;res=len*q.top().h;ans=max(ans,res);q.pop();}q.push((node){len+1,h[i]});}printf("%lld",ans);return 0;
}

注:
对于每一个$i$,要使它的宽度初始化为$0$

循环一定要开到$n+1$,不然最后站内残留的图形不会被计算面积

2. 双向维护下标

这就跟普通的单调栈维护求每个数左边和右边第一个小于它的数在哪一样了

设两个数组,分别求向左和向右。这样该段的高就是$h_i$,宽度为$r_i-l_i+1$,求最值即可

Code
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll N=1e6+10;
ll n,ans;
ll h[N];
stack<ll> q;
ll r[N],l[N];
int main(){scanf("%lld",&n);for(ll i=1;i<=n;i++) scanf("%lld",&h[i]);for(ll i=n;i>=1;i--){while(q.size()&&h[i]<=h[q.top()]) q.pop();if(q.empty()) r[i]=n+1;else r[i]=q.top();q.push(i);}while(q.size()) q.pop();for(ll i=1;i<=n;i++){while(q.size()&&h[i]<=h[q.top()]) q.pop();if(q.empty()) l[i]=0;else l[i]=q.top();q.push(i);}ll len,res;for(ll i=1;i<=n;i++){len=r[i]-l[i]-1;res=len*h[i];ans=max(ans,res);}printf("%lld",ans);return 0;
}
http://www.jsqmd.com/news/28309/

相关文章:

  • 一对一视频源码,提高可扩展性的常用设计模式 - 云豹科技
  • 20251101 之所思 - 人生如梦
  • 深度学习基础理论————常见评价指标以及Loss Function - Big-Yellow
  • 模型量化操作————GPTQ和AWQ量化 - Big-Yellow
  • CSP-S前集训总结
  • 在AI技术快速实现创意的时代,挖掘用户真实需求成为关键突破点——某知名舆情分析系统需求洞察
  • 最短路模板
  • 时序数据库-InfluxDB - LLj
  • 2025年质量好的航空充气密封圈厂家最新推荐排行榜
  • 2025年质量好的非开挖电力管用户好评厂家排行
  • 2025年口碑好的酚醛胶行业内口碑厂家排行榜
  • 基于Java+Springboot+Vue开发的大学生反诈视频宣传系统源码+运行步骤
  • Docker 部署 openEuler 教程及常见问题解决
  • 图中连通区域集合的获取
  • 2025年评价高的高铁桥梁垫块厂家最新权威推荐排行榜
  • 2025年专业的电加热管厂家最新权威推荐排行榜
  • 2025年热门的碳化蒸笼用户好评厂家排行
  • 2025年靠谱的给水管设备厂家推荐及选购指南
  • 2025年优质的仪器计量校准厂家推荐及采购参考
  • 2025年比较好的45三折轨厂家实力及用户口碑排行榜
  • 一对一聊天软件源码,jwt登陆校验携带token - 云豹科技
  • 2025年比较好的端子厂家最新实力排行
  • 2025年热门的壁挂炉TOP品牌厂家排行榜
  • 2025年热门的电动执行器机构高评价厂家推荐榜
  • 2025年比较好的自动化设备工业铝型材优质厂家推荐榜单
  • 2025年评价高的托玛琳床垫高评价厂家推荐榜
  • PHP 组件未来:Livewire 4 正式发布,性能更快,功能更完整
  • 2025年优质的专利评估可靠合作企业
  • 2025年评价高的圆形铝制口红管最新TOP品牌厂家排行
  • 2025年专业的钢丝软管由壬定制定做