牛客小白月赛13-H(单调栈+树状数组)
题目链接:https://ac.nowcoder.com/acm/contest/549/H
题意:给一个柱状图,包括每个矩阵的宽度和高度,求能组成的最大矩阵的面积。
思路:显然最大矩阵的高一定为n个矩阵中的一个矩阵的高,所以不访用单调栈求出每个矩阵左边、右边第一个高度小于该矩阵的下标。然后用树状数组求出该区间的宽度和,遍历一遍即可得到结果。算法复杂度O(nlogn),顺便吐槽这题数据,一朋友没用单调栈暴力求区间,复杂度为O(n^2),竟然也过了。。
AC代码:
#include<cstdio>
using namespace std;
typedef long long LL;
const int maxn=; int n,p;
int h[maxn],stk[maxn],L[maxn],R[maxn];
LL tr[maxn],ans; int lowbit(int x){
return x&(-x);
} void update(int x,int num){
while(x<=n){
tr[x]+=num;
x+=lowbit(x);
}
} int query(int x){
int ans=;
while(x>){
ans+=tr[x];
x-=lowbit(x);
}
return ans;
} int main(){
scanf("%d",&n);
for(int i=;i<=n;++i){
int tmp;
scanf("%d",&tmp);
update(i,tmp);
}
for(int i=;i<=n;++i)
scanf("%d",&h[i]);
h[]=h[n+]=;
stk[p=]=;
for(int i=;i<=n;++i){
while(h[stk[p]]>=h[i]) --p;
L[i]=stk[p]+;
stk[++p]=i;
}
stk[p=]=n+;
for(int i=n;i>=;--i){
while(h[stk[p]]>=h[i]) --p;
R[i]=stk[p]-;
stk[++p]=i;
}
for(int i=;i<=n;++i){
int w=query(R[i])-query(L[i]-);
if(1LL*w*h[i]>ans) ans=1LL*w*h[i];
}
printf("%lld\n",ans);
return ;
}
牛客小白月赛13-H(单调栈+树状数组)的更多相关文章
- 【牛客小白月赛6】F 发电 - 树状数组&快速幂&逆元
题目地址:https://www.nowcoder.com/acm/contest/136/F 树状数组.快速幂.逆元的模板运用: #include<iostream> #include& ...
- 牛客小白月赛12 H 华华和月月种树
题目链接: 题意:有三个操作 操作 1:表示节点 i 长出了一个新的儿子节点,权值为0,编号为当前最大编号 +1(也可以理解为,当前是第几个操作 1,新节点的编号就是多少). 操作 2:表示华华上线做 ...
- 牛客练习赛3 F - 监视任务——贪心&&树状数组
题目 链接 $Reki$ 在课余会接受一些民间的鹰眼类委托,即远距离的狙击监视防卫..$Reki$ 一共接收到$m$份委托,这些委托与 $n$ 个直线排布的监视点相关.第 $i$ 份委托的内容为:对于 ...
- 牛客小白月赛13 小A的柱状图(单调栈)
链接:https://ac.nowcoder.com/acm/contest/549/H来源:牛客网 题目描述 柱状图是有一些宽度相等的矩形下端对齐以后横向排列的图形,但是小A的柱状图却不是一个规范的 ...
- 单调栈+前缀和 || Nowcoder || 牛客小白月赛13 || 小A的柱状图
题面:小A的柱状图 题解:无 代码: #include<cstdio> #include<cstring> #include<iostream> #define l ...
- 牛客网 牛客小白月赛1 H.写真がとどいています
H.写真がとどいています 链接:https://www.nowcoder.com/acm/contest/85/H来源:牛客网 这个题数乱了,导致wa了好几次. 特别弱智,从A开始往上,就 ...
- 牛客小白月赛2 H 武 【Dijkstra】
链接:https://www.nowcoder.com/acm/contest/86/H来源:牛客网 题目描述 其次,Sεlιнα(Selina) 要进行体力比武竞赛. 在 Sεlιнα 所在的城市, ...
- 牛客小白月赛4 H 相邻的糖果 思维
链接:https://www.nowcoder.com/acm/contest/134/H来源:牛客网 题目描述 有n个盒子摆成一排,每个盒子内都有ai个糖果. 现在你可以执行以下操作: ·你可以选择 ...
- 牛客小白月赛16 H 小阳的贝壳 (差分+线段树)
链接:https://ac.nowcoder.com/acm/contest/949/H来源:牛客网 题目描述 小阳手中一共有 n 个贝壳,每个贝壳都有颜色,且初始第 i 个贝壳的颜色为 colico ...
随机推荐
- Resttemplate请求失败如何获取返回的json
参考:https://blog.csdn.net/u011974797/article/details/82424004 https://www.cnblogs.com/liumz0323/p/106 ...
- css之页面透明
能使元素变的透明的方法有: 1.Opacity 2.RGBA opacity会使后代元素都透明,而RGBA不会!
- BZOJ 3732: Network Kruskal 重构树
模板题,练练手~ Code: #include <cstdio> #include <algorithm> #define N 80000 #define setIO(s) f ...
- 手动升级 Confluence - 规划你的升级
1. 确定你的升级路径 使用下面的表格来确定最佳的升级路径来让你的Confluence 从当前版本升级到最新的 Confluence 版本. 你的版本 推荐升级到 Confluence 的升级路径 2 ...
- 51 Nod 不重叠的线段
#include<bits/stdc++.h> #define in(X) scanf("%d",&X) #define out(X) printf(" ...
- 微信小程序_(map)简单的小地图
map地图效果 官方文档:传送门 Page({ data: { markers: [{ iconPath: "/resources/others.png", id: 0, lati ...
- d3.js+svg的树形图
效果图 数据 { "name":"中国", "children": [ { "name":"浙江" ...
- java 获取文本一行一行读
直接上代码: 如果出现乱码:请改一下编码:我这里使用utf-8是会乱码的,改GBK就好了 // 读取文件内容 public static String readFile(String path) {/ ...
- Postman下载与安装
融e学-一个专注于重构知识,培养复合型人才的平台:http://www.i-ronge.com/ Postman 的官网下载地址是:https://www.getpostman.com/ 下载后看到压 ...
- 查询Oracle表空间使用情况
,),'990.99')||'%' "使用比(%)",F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最大块(M)" ...