【算法刷题日志】吸氧羊的StarryCoding之旅 - 贡献法计算

题目链接:https://www.starrycoding.com/problem/3

题目描述

吸氧羊终于注册了一个StarryCoding账号!(她很开心)

但是吸氧羊忘记了它的密码,她想起你是计算机大师,于是就来请教你。

她虽然不记得密码了,但她记得一个数组,而这个密码就是这个数组中所有区间的最大值之和。

你赶快求出来吧,她太想进去玩了!

本题视频题解:https://www.bilibili.com/video/BV1Bc411v71Q

输入描述

第一行一个整数 n n n,表示数组 a a a的长度。( 1 ≤ n ≤ 2 × 1 0 5 1 \le n \le 2 \times 10^5 1n2×105

第二行 n n n个整数表示数组 a a a中的元素。( 1 ≤ a i ≤ 1 0 8 1 \le a_i \le 10^8 1ai108

输出描述

一行一个整数表示结果。

输入样例1

5
1 1 1 1 1

输出样例1

15

解释

一共有15个区间,每个区间的最大值都是1,它们的和是15。

题解

单调栈计算出每个位置 i i i左边及右边比 a i a_i ai小的数字的个数,然后计算每个位置的贡献即可。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 2e5 + 9;
ll a[N],stk[N],l[N],r[N],top;
void solve()
{int n;cin >> n;for(int i = 1;i <= n;i ++) cin >> a[i];for(int i = 1;i <= n;i ++){while(top && a[stk[top]] < a[i]) top --;l[i] = top ? stk[top] + 1 : 1;stk[++ top] = i;}top = 0;for(int i = n;i > 0;-- i){while(top && a[stk[top]] <= a[i]) top --;r[i] = top ? stk[top] - 1 : n;stk[++ top] = i;}ll ans = 0;for(int i = 1;i <= n;i ++) ans += (i - l[i] + 1) * (r[i] - i + 1) * a[i];cout << ans << '\n';
}
int main(void)
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int _ = 1;while(_ --) solve();return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/679672.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM白的云会议管理系统的设计与实现(论文+源码)_kaic

摘 要 当下&#xff0c;如果还依然使用纸质文档来记录并且管理相关信息&#xff0c;可能会出现很多问题&#xff0c;比如原始文件的丢失&#xff0c;因为采用纸质文档&#xff0c;很容易受潮或者怕火&#xff0c;不容易备份&#xff0c;需要花费大量的人员和资金来管理用纸质文…

文献速递:深度学习医学影像心脏疾病检测与诊断--基于深度学习的低剂量SPECT心肌灌注图像去噪:定量评估与临床表现

Title 题目 Deep learning–based denoising of low‑dose SPECT myocardialperfusion images: quantitative assessment and clinical performance 基于深度学习的低剂量SPECT心肌灌注图像去噪&#xff1a;定量评估与临床表现 01 文献速递介绍 单光子发射计算机断层扫描&a…

挤橡机编制机盘笼绞成缆摇盘包膜机PLC数据采集远程监控联网方案

裸铜车间 编制车间 绞线车间 橡缆车间 橡缆车间 橡缆车间 力缆车闻 综合车间 设备名称设备编码、MMH101/RM201/S632拉丝生产线TC21039WGSB-4 48锭卧式高速编制机TC21033JCJX-13DHT中线连退拉丝机TC310636090150三层共挤连硫生产线TC22050电加热蒸汽锅炉TC22100TC22082T…

【Linux进程间通信(六)】深入理解 System V IPC

&#xff08;一&#xff09;引入 &#xff08;二&#xff09;IPC 命名空间 &#xff08;三&#xff09;ipc_ips结构体 &#xff08;四&#xff09;ipc_id_ary结构体 &#xff08;五&#xff09;kern_ipc_perm结构体 &#xff08;六&#xff09;操作系统对IPC资源是如何管理…

关于Anaconda常用的命令

常用命令 查看当前环境下的环境&#xff1a;conda env list查看当前conda的版本&#xff1b;conda --version conda create -n your_env_name pythonX.X&#xff08;2.7、3.6等)命令创建python版本为X.X。名字为your_env_name的虚拟环境。your_env_name文件可以在Anaconda安装…

嵌入式学习69-C++(Opencv)

知识零碎&#xff1a; QT的两种编译模式 1.debug 调试模式 …

用HAL库改写江科大的stm32入门例子_9-2 利用中断进行串口通讯

电路和 《用HAL库改写江科大的stm32入门例子_9-1》一致。 我们在whlie循环当中&#xff0c;不断查询端口&#xff0c;获取数据&#xff0c;存放到一个数组当中,同时回显给电脑上。这种方法耗费cpu,还是用中断进行串口通讯更合理。 基本操作看到一遍写得比较清晰的博客&#x…

SF 不消费buffer

1、请求合成请求vsync MessageQueue.cpp 返回nextWakeupTime struct ArmingInfo { nsecs_t mActualWakeupTime; nsecs_t mActualVsyncTime; nsecs_t mActualReadyTime; }; 在schedule 请求vsync 时会根据算法计算出nextVsyncTime时间&#…

Failed to get DISPLAY: Error: All configured authentication methods failed 解决方法

Vscode一连接远程服务器就报错&#xff1a; 这个时候我们是无法使用Xming显示图像的。 尝试后发现&#xff0c;Windows电脑能够ping通服务器ip&#xff0c;但是服务器ping不通Windows电脑&#xff1a; 在网上查攻略&#xff0c;设置Windows电脑ip地址白名单&#xff0c;但…

HCIP的学习(13)

第五章&#xff0c;重发布和路由策略 重发布 ​ 在路由协议的边界设备上&#xff0c;将某一种路由协议的路由信息引入到另一种路由协议中&#xff0c;这个操作被称为路由引入或者路由重分发。----技术本质为重发布。 条件 必须存在ASBR设备&#xff08;路由边界设备&#x…

YOLOv5改进(二)BiFPN替换Neck网络

前言 针对红绿灯轻量化检测&#xff0c;上一节使用MobileNetv3替换了主干网络&#xff0c;本篇将在使用BiFPN替换Neck的方式优化算法~ 往期回顾 YOLOv5改进&#xff08;一&#xff09;MobileNetv3替换主干网络 目录 一、BiFPN简介二、改进方法一第一步&#xff1a;在common.…

案例|200多套设备实时监测,守护江西彰湖水库安全

中型水库作为水利建设的重要组成部分&#xff0c;在防洪、供水、农业灌溉、改善民生和生态效益等方面都具有重要意义。国务院发布《关于切实加强水库除险加固和运行管护工作的通知》&#xff0c;重点提出要提升信息化管理能力&#xff0c;要加快建设水库雨水情测报、大坝安全监…