首页 > 其他分享 >【CSP201312-3】最大的矩形,单调栈

【CSP201312-3】最大的矩形,单调栈

时间:2023-02-08 21:02:20浏览次数:42  
标签:CSP201312 int width 直方图 hi maxn 矩形 单调


problem

201312-3
试题名称: 最大的矩形
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。

请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。

输入格式
  第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。
  第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。
输出格式
  输出一行,包含一个整数,即给定直方图内的最大矩形的面积。
样例输入
6
3 1 6 5 2 3
样例输出
10

solution

我就说好像在哪写过,出门右拐POJ2559,2018年的原题代码一字不改丢上去AC。。。
虽然现在未必能写的出单调栈,,我知道自己越学越菜系列。。。
但是CSP可以带模板和书进去啊啊啊什么鬼。。。。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn = 1e5+10;
int n, a[maxn], s[maxn], w[maxn];
int main(){
while(cin>>n &&n){
LL ans = 0, p = 0;
for(int i = 1; i <= n; i++)
scanf("%d",&a[i]);
a[n+1] = 0;
for(int i = 1; i <= n+1; i++){
if(a[i]>s[p])s[++p]= a[i], w[p] = 1;
else {
int width = 0;
while(s[p]>a[i]){
width += w[p];
ans = max(ans, (LL)width*s[p]);
p--;
}
s[++p] = a[i], w[p] = width+1;
}
}
cout<<ans<<'\n';
}
return 0;
}


标签:CSP201312,int,width,直方图,hi,maxn,矩形,单调
From: https://blog.51cto.com/gwj1314/6044897

相关文章

  • 【CSP201312-2】ISBN号码,字符串,简单模拟
    problem试题编号:201312-2试题名称:ISBN号码时间限制:1.0s内存限制:256.0MB问题描述:问题描述每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、......
  • 【CSP201312-1 】出现次数最多的数,排序后扫描并记录
    problem问题描述给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。输入格式输入的第一行只有一个正整数n(1≤n≤1000),表......
  • 1.4 单调栈
    84.柱状图中最大的矩形最大矩形的高度瓶颈可能在于各个柱子的高度,如图所示基于以上观察,一个朴素算法是:枚举每种可能的高度瓶颈1.1向左、右扩展宽度1.2擂台更新......
  • 【tyvj1305】最大子序和(单调队列)
    problem给你一个长为n的序列求一个长不超过m的连续子段,使子段和最大solution如果n<=10^3,我们很容易写出枚举(s是前缀和,区间[l,r]的和就是s[r]-s[l-1]。枚举l,r即可。for(int......
  • 重学单调队列优化dp
    再谈单调队列优化dp。题目:CF1077F1&2PictureswithKittens(Easy&hardversion)从n个数中选出m个数,连续k个数至少选出一个,最大化选出数和。easyversion普通dp,hard则......
  • 2019南昌网络赛 I. Max answer(DP或者单调栈+思维)
    Alicehasamagicarray.Shesuggeststhatthevalueofaintervalisequaltothesumofthevaluesintheinterval,multipliedbythesmallestvalueinthein......
  • P2241 统计方形(数据加强版)(矩形中的正方,长方形统计)
    统计方形(数据加强版)题目背景1997年普及组第一题题目描述有一个\(n\timesm\)方格的棋盘,求其方格包含多少正方形、长方形(不包含正方形)。输入格式一行,两个正整数\(......
  • 单调栈
    顾名思义单调栈就是具有单调性的栈常见模型:找出每个数左边离它最近的比它大/小的数【算法】intstk[N],tt=0; //栈中存数据for(inti=1;i<=n;i++){i......
  • 矩形A + B 2524
    ​​点击这里看题目链接矩形A+B​​//有n行和m列。//如果只看一行的话,它有多少个矩形呢?单个地数有m个,两个地数有m-1个……,m个地数有1个。//每一行就有:1+2+3+……+m个......
  • aijs 添加图形 线条与矩形
    varcanvas=activeDocument.groupItems.add();varpt=72/25.4;//把需要添加的图形放入列表varshapes=newArray();shapes.push(newShapeLine(0,0,20,20,0.2,......