首页 > 其他分享 >SPOJ1805 HISTOGRA - Largest Rectangle in a Histogram 题解

SPOJ1805 HISTOGRA - Largest Rectangle in a Histogram 题解

时间:2023-11-13 23:01:17浏览次数:42  
标签:平移 SPOJ1805 int 题解 Histogram maxn Largest Rectangle

Link

SPOJ1805 HISTOGRA - Largest Rectangle in a Histogram

Question

在一条水平线上有 \(n\) 个高为 \(a_i\) 的矩形,求包含于这些矩形的最大子矩形面积。

Solution

我们定义 \(L_i\) 表示有 \(a_i\) 这个高度的一根悬线,往左最多能平移到什么位置

初始化显然,\(a_i=i\)

考虑转移

  • 如果当前 \(l_i=1\) 则已经扩展到了
  • 如果当前 \(a_i > a_{l_i-1}\) 则从当前悬线不能平移到 \(L_i-1\)
  • 如果当前 \(a_i \le a_{l_i-1}\) 则当前悬线能平移到 \(Li-1\) 往左边平移到的最远的地方

同样的构造一个 \(R_i\) 就好了

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=100005;
int N,a[maxn];
int L[maxn],R[maxn];
int main(){
    freopen("SP1805.in","r",stdin);
    while(scanf("%d",&N)!=EOF&&N){
        LL ans=0;
        for(int i=1;i<=N;i++) scanf("%d",&a[i]),L[i]=R[i]=i;
        for(int i=1;i<=N;i++) 
            while(L[i]>1&&a[i]<=a[L[i]-1]) L[i]=L[L[i]-1];
        for(int i=N;i;i--)
            while(R[i]<N&&a[i]<=a[R[i]+1]) R[i]=R[R[i]+1];
        for(int i=1;i<=N;i++)
            ans=max(ans,(LL)(R[i]-L[i]+1)*a[i]);
        printf("%lld\n",ans);
    }
    return 0;
}

标签:平移,SPOJ1805,int,题解,Histogram,maxn,Largest,Rectangle
From: https://www.cnblogs.com/martian148/p/17830530.html

相关文章

  • 题解 AT_codefestival_2016_final_f【Road of the King】
    注意到当前移动到的位置并不重要,重要的是经过的点数和\(1\)所在强连通分量大小,因此把它们放进状态里:设\(f_{i,j,k}\)表示进行\(i\)次移动,经过了\(j\)个不同的点,此时\(1\)所在的强连通分量大小为\(k\)的方案数。考察下一次移动到的点的情况:没有访问过:共有\(n-j\)......
  • UVA11282 题解
    题意简述Kelly寄出去\(n\)封邀请函,但她希望只有小于等于\(m\)个人收到他们自己的邀请函(即有至少\(n-m\)个人收到了别人的邀请函)。思路形成容易发现,这道题是一个典型的错排题,我们只需要分别求出\(n-m\)个元素到\(n\)个元素的错排即可。接下来为错排的推导,我们令\(f......
  • [题解] P4755 Beautiful Pair
    P4755BeautifulPair给你一个长度为\(n\)的序列\(a\),求有多少个区间\([l,r]\)满足\(a_l\cdota_r\le\max_{i=l}^ra_i\)。\(n\le10^5,a_i\le10^9\)。首先按最大值位置分治。记当前分治区间为\([l,r]\),分治中心为\(mid\)。那么我们现在要做的就是统计跨......
  • 【题解 P4062 & P8313】 Yazid 的新生舞会&Izbori
    [COCI2021-2022#4]Izbori题目描述Malnar先生正在竞选县长,这个县一共有\(n\)栋房屋,每栋房屋里都住着一位居民。Malnar先生知道,选举的赢家不一定是最好的候选人,而是在选举前举办的宴会最好的候选人。因此,在选举前几天,他将邀请第\(l\)至\(r(l\ler)\)栋房屋内居住的居民,为......
  • 【题解】CF1891E - Brukhovich and Exams
    【题解】CF1891E-BrukhovichandExamshttps://www.luogu.com.cn/problem/CF1891E我们考虑把区间分段:若两个相邻的数不互素,中间分开;若两个相邻的数中有且仅有一个\(1\),中间分开。那么我们得到了两种区间:全\(1\)区间与无\(1\)区间。若两个相邻数在同一区间内,那么就在区间......
  • [题解] CFgym101623F Factor-Free Tree
    Factor-FreeTree当一棵二叉树中的每个节点的权值都与它所有祖先的权值互质时,我们称它为factor-freetree。给你一棵按照中序遍历的顺序的权值序列\(a\),求这个序列是否对应这一棵factor-freetree。如果是就输出每个节点的父亲。\(n\le10^5,a_i\le10^7\)。考虑怎么......
  • SP2139题解
    思路这题数据范围小,暴力就可以了。首先我们用map来统计每个人的下标,用\(bk_{i,j}\)表示第\(i\)个人第\(j\)题是否知道答案。对于每次合作交流,暴力修改就可以了,先统计出两个人的下标,假设一个为\(x\),另一个为\(y\)。然后,如果\(bk_{x,i}\)和\(bk_{y,i}\)中(\(1\lei......
  • [ARC106E] Medals 题解
    题意有一个商店和\(N\)名员工,其中第\(i\)名员工在第\(1\simA_i\)天工作,在第\(A_i+1\sim2\timesA_i\)休息,接下来每\(A_i\)天改变一次状态。每一天你都可以选择一名来上班的员工并为其颁一个奖,求使得每名员工都获得至少\(K\)个奖的最小天数。\(1\leN\le......
  • [题解] CF1156E Special Segments of Permutation
    SpecialSegmentsofPermutation给你一个排列\(p\),求有多少个区间\([l,r]\)满足\(p_l+p_r=\max_{i\in[l,r]}p_i\)。\(n\le2\times10^5\)。按最大值分治,记当前的分治中心为\(mid\),分治区间为\([l,r]\)。然后需要计算跨分治中心的贡献。如果\(mid-l......
  • [题解]AT_abc328_f [ABC328F] Good Set Query
    思路带权并查集模板。如果对于一个三元组\((a,b,c)\)如果它能够添加到\(S\)中一定满足如下条件中的一条:\(X_a,X_b\)满足其中有一个是「不确定」的。在这里\(X_i\)「不确定」指\(X_i\)没有与其它的任意\(X_j\)有关系。\(X_a,X_b\)有间接或直接的关系,但是能计算......