问题描述
  在横轴上放了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
 
思路:单调栈维护

借鉴】我们建立一个栈,用来保存若干个矩形,这些矩形的高度是单调递增的。我们从左到右依次扫描每一个矩形:如果当前矩形比栈顶矩形高,直接进栈。

否则不断取出栈顶,直至栈为空或者栈顶矩形的高度比当前矩形小。在出栈过程中,我们累计被弹出的矩形的宽度之和,并且每弹出一个矩形,就用它的高度乘上累积的宽度更新答案。整个出栈过程结束后,我们把高度作为当前矩形的高度、宽度为累计值的新矩形入栈。

AC代码:

#include<bits/stdc++.h>

using namespace std;
int h[];
int main(){
int n;
cin>>n;
int maxn=;
for(int i=;i<=n;i++){
scanf("%d",&h[i]);
maxn=max(maxn,h[i]);
}
deque<int> q;
for(int i=;i<=n;i++){
if(q.empty()){ //
q.push_back(h[i]);
continue;
}
if(h[i]>=q.back()){
q.push_back(h[i]);
continue;
}
int num=;
while(!q.empty()&&q.back()>h[i]){
num++;
int t=q.back();q.pop_back();
maxn=max(maxn,t*num);
}
num++;
while(num){
q.push_back(h[i]);
num--;
}
}
int num=;
while(!q.empty()){
num++;
int temp=q.back();q.pop_back();
maxn=max(num*temp,maxn);
}
printf("%d\n",maxn);
return ;
}

最大的矩形(CCF)的更多相关文章

  1. CCF CSP 201312-3 最大的矩形

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...

  2. CCF 最大的矩形

    问题描述 试题编号: 3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个 ...

  3. CCF真题之最大矩形

    201312-3 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩形构成了一个直方图.例如,下图中六个矩形的高度就分别是3, 1, 6 ...

  4. CCF 201312-3 最大的矩形 (暴力,离散化)

    问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩形构成了一个直方图.例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3 ...

  5. CCF系列之最大的矩形(201312-3)

    试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩 ...

  6. ccf认证模拟题之三---最大的矩形

    问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩形构成了一个直方图.例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3 ...

  7. CCF - 最大矩形

    试题编号: 201312-3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n ...

  8. CCF 201312-3 最大的矩形[比较简单]

    问题描述 试题编号: 201312-3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ ...

  9. CCF模拟题 最大的矩形

    最大的矩形 时间限制: 1.0s 内存限制: 256.0MB     问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩形构成了一个直方 ...

  10. CCF模拟试题——最大的矩形 Java

    我们先看一下题目:   问题描述   试题编号:         201312-3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻 ...

随机推荐

  1. Codeforces contest 1277 E. Beautiful Rectangle

  2. LC 387. First Unique Character in a String

    题目描述 Given a string, find the first non-repeating character in it and return it's index. If it doesn ...

  3. xpath定位器

    目录 什么是xpath? xpath的作用 xpath的术语 xpath语法 XPath 轴 XPath 运算符 xpath的优势 什么是xpath? 官方解释:XPath即为XML路径语言(XML ...

  4. 列表推导:python2和python3中作用域的问题

    python2中: x = 'my love' dummy = [x for x in 'ABC'] print x 此时x打印为:'C' python3中: x = 'my love' dummy ...

  5. VS2017的一些调试方法技巧

    一.基本的操作. 1.启动调试. 可以通过VS的调试(Debug)菜单启动调试.点击调试菜单下的“启动调试”或者按F5键启动.如果你已经在代码中加入了断点,那么执行会自动开始. 注:退出调试快捷键sh ...

  6. User space(用户空间) 与 Kernel space(内核空间)

    出处: User space 与 Kernel space (整理)用户空间_内核空间以及内存映射 学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel spac ...

  7. 第六章 ZYNQ-MIZ701 GPIO使用之MIO

      6.0 本章难度系数★★☆☆☆☆☆ 6.1 GPIO简介 Zynq7000系列芯片有54个MIO(multiuse I/O),它们分配在 GPIO 的Bank0 和Bank1隶属于PS部分,这些I ...

  8. PB做的托盘程序(最小化后在左下角显示图标)

    见‘文件’资源

  9. k8s组件通信或者创建pod生命周期

    Kubernetes 多组件之间的通信原理: apiserver 负责 etcd 存储的所有操作,且只有 apiserver 才直接操作 etcd 集群 apiserver 对内(集群中的其他组件)和 ...

  10. luogu2568GCD题解--欧拉函数

    题目链接 https://www.luogu.org/problemnew/show/P2568 分析 题目即求\(\sum_{i=1}^N \sum_{j=1}^N [gcd(i,j)\) \(is ...