题目

链接:https://ac.nowcoder.com/acm/contest/28537/Q
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

柱状图是有一些宽度相等的矩形下端对齐以后横向排列的图形,但是小A的柱状图却不是一个规范的柱状图,它的每个矩形下端的宽度可以是不相同的一些整数,分别为a[i]a[i]a[i],每个矩形的高度是h[i]h[i]h[i],现在小A只想知道,在这个图形里面包含的最大矩形面积是多少。

输入描述:

  1. 一行一个整数N,表示长方形的个数
  2. 接下来一行N个整数表示每个长方形的宽度
  3. 接下来一行N个整数表示每个长方形的高度

输出描述:

  1. 一行一个整数,表示最大的矩形面积

示例1

输入

  1. 7
  2. 1 1 1 1 1 1 1
  3. 2 1 4 5 1 3 3

输出

  1. 8

说明

  1. 样例如图所示,包含的最大矩形面积是8

备注:

  1. 1n1e6,1a[i]≤100,1h[i]≤1e91 \leq n \leq 1e6 , 1\leq a[i] \leq 100 ,1\leq h[i] \leq 1e91n1e6,1a[i]≤100,1h[i]≤1e9

题解

突破点一:

它只告诉了每一个长方形的宽,没有办法直接求出老多个长方形的宽

所以我使用前缀和…

突破点二:

记住:单调栈可以解决

  1. 左/右第一个比他小/大的
  2. 排队问题中有没有人插队

这里,我从左往右来枚举方格,让他向左,向右扩展!

代码

  1. #include <iostream>
  2. #include <stack>
  3. using namespace std;
  4. typedef long long LL;
  5. const int MAX = 1e6 + 7;
  6. int a_origin[MAX];
  7. int a[MAX];
  8. int h[MAX];
  9. int left_[MAX];//左边比他小的方格所对应的前缀和
  10. int right_[MAX];//右边比他小的方格所对应的前缀和
  11. int main()
  12. {
  13. LL ans = 0;
  14. ios::sync_with_stdio(false);
  15. cout.tie(0);
  16. cin.tie(0);
  17. int n;
  18. cin >> n;
  19. for (int i = 1; i <= n; i++)
  20. {
  21. cin >> a_origin[i];
  22. a[i] = a_origin[i] + a[i - 1];
  23. }
  24. for (int i = 1; i <= n; i++)
  25. {
  26. cin >> h[i];
  27. }
  28. {//stack没有清空的选项,我只得创建代码块,让系统清除
  29. stack<int>st;
  30. for (int i = n; i > 0; i--)
  31. {
  32. while (!st.empty() && h[i] <= h[st.top()])
  33. st.pop();
  34. if (st.empty())
  35. {
  36. right_[i] = n + 1;//!!!!!!!!!!
  37. st.push(i);
  38. }
  39. else
  40. {
  41. right_[i] = st.top();
  42. st.push(i);
  43. }
  44. }
  45. }
  46. {
  47. stack<int>st;
  48. for (int i = 1; i <= n; i++)
  49. {
  50. while (!st.empty() && h[i] <= h[st.top()])
  51. st.pop();
  52. if (st.empty())
  53. {
  54. left_[i] = 0;//!!!!!!!!!!
  55. st.push(i);
  56. }
  57. else
  58. {
  59. left_[i] = st.top();
  60. st.push(i);
  61. }
  62. }
  63. }
  64. for (int i = 1; i <= n; i++)
  65. {
  66. LL tmp = (a[right_[i]-1] - a[left_[i]])*h[i];
  67. ans = max(tmp, ans);
  68. }
  69. cout << ans;
  70. return 0;
  71. }

小A的柱状图_via牛客网的更多相关文章

  1. 小C的记事本_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/G 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K,其他语 ...

  2. 算法题14 小Q歌单,牛客网,腾讯笔试题

    算法题14 小Q歌单,牛客网,腾讯笔试题 题目: 小Q有X首长度为A的不同的歌和Y首长度为B的不同的歌,现在小Q想用这些歌组成一个总长度正好为K的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单内歌 ...

  3. 吐泡泡_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

  4. 栈和排序_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/26886/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  5. 简单的数据结构_via牛客网

    题面 链接:https://ac.nowcoder.com/acm/contest/28537/K 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  6. 牛牛与后缀表达式_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/B 来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 262144K,其他语 ...

  7. 好串_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

  8. 算法题16 贪吃的小Q 牛客网 腾讯笔试题

    算法题16 贪吃的小Q 牛客网 腾讯笔试题 题目: 链接:https://www.nowcoder.com/questionTerminal/d732267e73ce4918b61d9e3d0ddd9 ...

  9. 牛客网 Wannafly挑战赛8 A.小Y和小B睡觉觉

    写了一会不想写了... A-小Y和小B睡觉觉 链接:https://www.nowcoder.com/acm/contest/57/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制: ...

随机推荐

  1. height不确定时,如何使用动画效果展开高度

    要点: 当元素 height 不确定时,可以使用 max-height 设置动画效果 a[href="foldBox"] 用于打开 #foldBox(利用伪元素 :target) ...

  2. AspNetCore开源中间件-VueRouterHistory

    前言 用过VueRouter路由组件的应该都知道,VueRouter有hash和history两种模式.hash模式会在url中插入#,history模式下url则看上去更加简洁美观.如果想要支持hi ...

  3. MyBatisPlus 入门教程,这篇很赞

    在之前的文章中我们经常使用MybatisPlus进行增删改查,可能有些小伙伴对mybatisplus不是很熟悉,今天特意出了一般入门级的教程,我自己也是一边学习一边写的,有什么地方写的不好的地方请留意 ...

  4. 命令行参数 getopt模块

    getopt中的函数: getopt.getopt(sys.argv[1:], shortopts, longopts=[]) args指的是当前脚本接收的参数,它是一个列表,可以通过sys.argv ...

  5. 【leetcode】239. 滑动窗口最大值

    目录 题目 题解 三种解法 "单调队列"解法 新增.获取最大值 删除 代码 题目 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以 ...

  6. [论文][表情识别]Towards Semi-Supervised Deep Facial Expression Recognition with An Adaptive Confidence Margin

    论文基本情况 发表时间及刊物/会议:2022 CVPR 发表单位:西安电子科技大学, 香港中文大学,重庆邮电大学 问题背景 在大部分半监督学习方法中,一般而言,只有部分置信度高于提前设置的阈值的无标签 ...

  7. mac安装java环境

    1.java安装包获取: 链接:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 2.验证安装是否成 ...

  8. Linux 装完后没有声音的解决办法

    备注:1)Ubuntu Desktop版本:16.042)Linux工作用户:root1. 临时方法在终端中执行命令:pulseaudio --start --log-target=syslog2. ...

  9. 牛亚男:基于多Domain多任务学习框架和Transformer,搭建快精排模型

    导读: 本文主要介绍了快手的精排模型实践,包括快手的推荐系统,以及结合快手业务展开的各种模型实战和探索,全文围绕以下几大方面展开: 快手推荐系统 CTR模型--PPNet 多domain多任务学习框架 ...

  10. Torch的索引与形变

    >>> a = torch.Tensor([[1,2],[3,4]])>>> atensor([[1., 2.], [3., 4.]])>>> a ...