首页 > 其他分享 >HISTOGRA - 最大矩形面积(单调栈)

HISTOGRA - 最大矩形面积(单调栈)

时间:2024-09-13 11:51:04浏览次数:8  
标签:typedef width int tt stk HISTOGRA vx 矩形 单调

include<bits/stdc++.h>

using namespace std;

define x first

define y second

typedef pair<int,int> PII;
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int uint;
typedef vector VS;
typedef vector VI;
typedef vector<vector> VVI;
vector vx;
inline int mp(int x) {return upper_bound(vx.begin(),vx.end(),x)-vx.begin();}
inline int log_2(int x) {return 31-__builtin_clz(x);}
inline int popcount(int x) {return __builtin_popcount(x);}
inline int lowbit(int x) {return x&-x;}
const int N = 1e5+10;
int stk[N],a[N],w[N];
void solve()
{
//对于一个单调递增序列最大矩形面积应该是枚举左端点乘以长度
int n;
while(cin>>n,n)
{
int tt = 0;
ll maxn = 0;
for(int i=1;i<=n;++i) cin>>a[i];
a[n+1] = 0;
stk[0] = 0;
//需要用width来维护累计矩形宽度
//i枚举到n+1为了弹出最后一个矩形注意要把a[n+1]赋值
for(int i=1;i<=n+1;++i)
{
if(a[i]>stk[tt]) stk[++tt] = a[i], w[tt] = 1;
else
{
int width = 0;
while(tt&&a[i]<stk[tt])
width += w[tt], maxn = max(maxn,(ll)width*stk[tt--]);
stk[++tt] = a[i], w[tt] = width + 1;
}
}
cout<<maxn<<'\n';
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int T = 1;
//cin>>T;
while(T--)
{
solve();
}
}

标签:typedef,width,int,tt,stk,HISTOGRA,vx,矩形,单调
From: https://www.cnblogs.com/ruoye123456/p/18411945

相关文章

  • java+opencv4来获取图像中轮廓的最小外接矩形
     举例:获取以下图片中的火车的最小外接矩形完成钱确认opencv的环境配置完整。要想查找图片中的轮廓信息,首先要获取图片的二制图,因为二制图的查找效率更高,具体原因自行百度。为了提高转换二制图的效率可以现将图片转换为灰度图。示例代码如下://将彩色图像转换为灰度图像M......
  • 单调队列优化 DP
    单调队列优化DP回忆单调队列的作用,\(O(n)\)求出每一个大小为\(K\)的窗口中的最大、最小值。以最大值为例,我们可以得到如下DP转移方程:\[dp[i]=\max(val[j])+base[i],i-j\leqK\]其中\(base[i]\)是一个仅与\(i\)有关的式子,不受\(j\)影响,且可以预处理得到;而\(val[j]......
  • 单调队列优化 dp
    1.概念单调队列优化的本质是借助单调性,及时排除不可能的决策,保持候选集合的秩序性。2.例题P1714切蛋糕题目大意:给定一个序列,找出长度不超过\(m\)的连续子序列,使得子序列中所有数的和最大。思路:要求区间和,首先求出前缀和,然后考虑朴素dp,不难想到用\(dp[i]\)表示包含......
  • OpenCV结构分析与形状描述符(19)查找二维点集的最小面积外接旋转矩形函数minAreaRect()
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述找到一个包围输入的二维点集的最小面积旋转矩形。该函数计算并返回指定点集的最小面积边界矩形(可能是旋转的)。开发者需要注意的是,当数据接近包含的Mat元素边界时,返回的Rotated......
  • 前端使用 Konva 实现可视化设计器(22)- 绘制图形(矩形、直线、折线)
    本章分享一下如何使用Konva绘制基础图形:矩形、直线、折线,希望大家继续关注和支持哈!请大家动动小手,给我一个免费的Star吧~大家如果发现了Bug,欢迎来提Issue哟~github源码gitee源码示例地址矩形先上效果!实现方式基本和《前端使用Konva实现可视化设计器(21)-绘制......
  • 单调栈
    题目:AcWing830.单调栈:https://www.acwing.com/problem/content/832/B:https://codeforces.com/gym/105158解决问题:得到一个数左边或右边第一个≥(>)或≤(<)它的数模板://AcWing830.单调栈#include<iostream>usingnamespacestd;constintN=1e5+10;intarr[N......
  • 洛谷题单指南-常见优化技巧-P1886 滑动窗口 /【模板】单调队列
    原题链接:https://www.luogu.com.cn/problem/P1886题意解读:单调队列模版题。解题思路:采用双端队列维护单调的序列,单调队列三部曲:1、去头,当窗口内元素个数超过k,队头出队2、去尾,当要加入的元素会破坏单调性,队尾出队3、入队,将元素的下标存入队列每一次入队后,队头元素即为窗口最......
  • Python Matplotlib绘制柏拉图以及在ax.table上绘制矩形、直线、椭圆
    快速入门指南官网官方网址:Matplotlib—VisualizationwithPython官方教程:Tutorials—Matplotlib3.9.2documentation官方指南:UsingMatplotlib—Matplotlib3.9.2documentation官方示例:Examples—Matplotlib3.9.2documentation官方API说明:APIReference—Mat......
  • 告别单调,Xmind思维导图之后还有这三款神器,让学习工作更愉快
    这年头信息量爆炸,我们得想办法把事情想清楚、把活儿排排好、学点新玩意儿。思维导图这东西,因为它画出来一目了然,用起来也简单,所以特别受学生们和上班的人的欢迎。在这么多画思维导图的软件里,Xmind因为功能全、界面不复杂,挺招人喜欢的。不过,除了Xmind思维导图,还有几个软件也挺好......
  • CF1715E. Long Way Home -决策单调性、图
    link:https://codeforces.com/contest/1715/problem/E有\(n\)座城市,城市间有\(m\)条双向道路,通过第\(i\)条道路需要花费\(w_i\)的时间,任意两个城市之间都有航班,乘坐城市\(u\)和\(v\)之间的航班需要花费\((u-v)^2\)的时间。现在请对于任意城市\(i(1\lei\len)\)......