题目链接:https://ac.nowcoder.com/acm/contest/549/H

题意:给一个柱状图,包括每个矩阵的宽度和高度,求能组成的最大矩阵的面积。

思路:显然最大矩阵的高一定为n个矩阵中的一个矩阵的高,所以不访用单调栈求出每个矩阵左边、右边第一个高度小于该矩阵的下标。然后用树状数组求出该区间的宽度和,遍历一遍即可得到结果。算法复杂度O(nlogn),顺便吐槽这题数据,一朋友没用单调栈暴力求区间,复杂度为O(n^2),竟然也过了。。

AC代码:

  1. #include<cstdio>
  2. using namespace std;
  3. typedef long long LL;
  4. const int maxn=;
  5.  
  6. int n,p;
  7. int h[maxn],stk[maxn],L[maxn],R[maxn];
  8. LL tr[maxn],ans;
  9.  
  10. int lowbit(int x){
  11. return x&(-x);
  12. }
  13.  
  14. void update(int x,int num){
  15. while(x<=n){
  16. tr[x]+=num;
  17. x+=lowbit(x);
  18. }
  19. }
  20.  
  21. int query(int x){
  22. int ans=;
  23. while(x>){
  24. ans+=tr[x];
  25. x-=lowbit(x);
  26. }
  27. return ans;
  28. }
  29.  
  30. int main(){
  31. scanf("%d",&n);
  32. for(int i=;i<=n;++i){
  33. int tmp;
  34. scanf("%d",&tmp);
  35. update(i,tmp);
  36. }
  37. for(int i=;i<=n;++i)
  38. scanf("%d",&h[i]);
  39. h[]=h[n+]=;
  40. stk[p=]=;
  41. for(int i=;i<=n;++i){
  42. while(h[stk[p]]>=h[i]) --p;
  43. L[i]=stk[p]+;
  44. stk[++p]=i;
  45. }
  46. stk[p=]=n+;
  47. for(int i=n;i>=;--i){
  48. while(h[stk[p]]>=h[i]) --p;
  49. R[i]=stk[p]-;
  50. stk[++p]=i;
  51. }
  52. for(int i=;i<=n;++i){
  53. int w=query(R[i])-query(L[i]-);
  54. if(1LL*w*h[i]>ans) ans=1LL*w*h[i];
  55. }
  56. printf("%lld\n",ans);
  57. return ;
  58. }

牛客小白月赛13-H(单调栈+树状数组)的更多相关文章

  1. 【牛客小白月赛6】F 发电 - 树状数组&快速幂&逆元

    题目地址:https://www.nowcoder.com/acm/contest/136/F 树状数组.快速幂.逆元的模板运用: #include<iostream> #include& ...

  2. 牛客小白月赛12 H 华华和月月种树

    题目链接: 题意:有三个操作 操作 1:表示节点 i 长出了一个新的儿子节点,权值为0,编号为当前最大编号 +1(也可以理解为,当前是第几个操作 1,新节点的编号就是多少). 操作 2:表示华华上线做 ...

  3. 牛客练习赛3 F - 监视任务——贪心&&树状数组

    题目 链接 $Reki$ 在课余会接受一些民间的鹰眼类委托,即远距离的狙击监视防卫..$Reki$ 一共接收到$m$份委托,这些委托与 $n$ 个直线排布的监视点相关.第 $i$ 份委托的内容为:对于 ...

  4. 牛客小白月赛13 小A的柱状图(单调栈)

    链接:https://ac.nowcoder.com/acm/contest/549/H来源:牛客网 题目描述 柱状图是有一些宽度相等的矩形下端对齐以后横向排列的图形,但是小A的柱状图却不是一个规范的 ...

  5. 单调栈+前缀和 || Nowcoder || 牛客小白月赛13 || 小A的柱状图

    题面:小A的柱状图 题解:无 代码: #include<cstdio> #include<cstring> #include<iostream> #define l ...

  6. 牛客网 牛客小白月赛1 H.写真がとどいています

    H.写真がとどいています   链接:https://www.nowcoder.com/acm/contest/85/H来源:牛客网     这个题数乱了,导致wa了好几次. 特别弱智,从A开始往上,就 ...

  7. 牛客小白月赛2 H 武 【Dijkstra】

    链接:https://www.nowcoder.com/acm/contest/86/H来源:牛客网 题目描述 其次,Sεlιнα(Selina) 要进行体力比武竞赛. 在 Sεlιнα 所在的城市, ...

  8. 牛客小白月赛4 H 相邻的糖果 思维

    链接:https://www.nowcoder.com/acm/contest/134/H来源:牛客网 题目描述 有n个盒子摆成一排,每个盒子内都有ai个糖果. 现在你可以执行以下操作: ·你可以选择 ...

  9. 牛客小白月赛16 H 小阳的贝壳 (差分+线段树)

    链接:https://ac.nowcoder.com/acm/contest/949/H来源:牛客网 题目描述 小阳手中一共有 n 个贝壳,每个贝壳都有颜色,且初始第 i 个贝壳的颜色为 colico ...

随机推荐

  1. 【51nod1220】约数之和

    题目 d(k)表示k的所有约数的和.d(6) = 1 + 2 + 3 + 6 = 12. 定义S(N) = ∑1<=i<=N ∑1<=j<=N d(i*j). 例如:S(3) ...

  2. Python CGI编程Ⅵ

    GET和POST方法 浏览器客户端通过两种方法向服务器传递信息,这两种方法就是 GET 方法和 POST 方法. 使用GET方法传输数据 GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面 ...

  3. MySQL--关于MySQL练习过程中遇到的AVG()函数处理空值的问题

    最近正准备面试,所以本来不怎么熟悉的SQL语句迫切需要练习,学习一下 在此感谢 笨鸟先飞-天道酬勤 大佬的博客:https://blog.csdn.net/dehu_zhou/article/deta ...

  4. viewport的相关知识点

    主要说一些viewport的基本原理以及使用 ㈠概念 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的 ...

  5. python re.match与re.search的区别

    re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None:而re.search匹配整个字符串,直到找到一个匹配. #!/usr/bin/python impor ...

  6. 分块查找(Blocking Search)

    1.定义 分块查找(Blocking Search)又称索引顺序查找.它是一种性能介于顺序查找和二分查找之间的查找方法. 2.基本思想 分块查找的基本思想是: (1)首先查找索引表 索引表是有序表,可 ...

  7. 微信小程序开发整理

    具体介绍包含以下内容: 1.文件结构 2.组件 4.API 4.工具 5.问题

  8. Linux命令-文本编辑(一)

    Linux命令-文本编辑(一) Linux col命令 Linux col命令用于过滤控制字符. 在许多UNIX说明文件里,都有RLF控制字符.当我们运用shell特殊字符">&quo ...

  9. apply,call,bind函数作用与用法

    作用 可以把方法借给其它对象使用,并且改变this的指向 a.apply(b,[3,2]);//this指向由a变为b, a的方法借给b使用 实例: function add(a,b){       ...

  10. 十四周学习总结&简易记事本

    学习总结: 一.JDBC: 1.JDBC提供里一套与平台无关的标准数据库操作接口和类,只要支持java的数据库厂商,所提供的数据库都可以以使用JDBC操作. 2.JDBC的主要操作类及接口: 3.JD ...