hiho-hihoCoder挑战赛29-D-不上升序列
来源:互联网 发布:欧莱雅 曼秀雷敦 知乎 编辑:程序博客网 时间:2024/06/11 05:39
ACM模版
描述
题解
这是一个原题,一眼看到这个题我就知道是原题,就是想不起来是哪里见过了……
找了半天算是找到了,CF 的原题,具体题号就不说了,因为那个是不降,这个是不上升。
这个题有个很牛的解法,就是用折线的思维考虑,将折线进行合并,可以用 multiset
写(代码 One),也可以用 priority_queue
写(代码 Two),原理是一毛一样的……不断添加点,和之前添加的构成线,当添加的点比之前最小的还小时,说明此时变成了折线,形成了折点,所以我们可以进行合并重新化为线。在这部分,我们只用考虑折点,虽然代码十分好些,但是好像并不容易理解的说……还是去看看题解出处怎么说吧……
原题解链接>>>
代码
One:
#include <cstdio>#include <set>using namespace std;const int MAXN = 5e5 + 10;int a[MAXN];multiset<int> mul;int main(){ int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } long long ans = 0; for (int i = 0; i < n; i++) { if (mul.empty() || *mul.begin() >= a[i]) { mul.insert(a[i]); } else { ans += a[i] - *mul.begin(); mul.erase(mul.begin()); mul.insert(a[i]); mul.insert(a[i]); } } printf("%lld\n",ans); return 0;}
Two:
#include <iostream>#include <cstdio>#include <queue>using namespace std;int n, c;long long k;priority_queue<int, vector<int>, greater<int> > a;int main(){ cin >> n; for (int i = 0; i < n; i++) { cin >> c; a.push(c); if (a.top() < c) { k += c - a.top(); a.pop(); a.push(c); } } cout << k << '\n'; return 0;}
阅读全文
0 0
- hiho-hihoCoder挑战赛29-D-不上升序列
- hihoCoder挑战赛29 D.不上升序列
- hihocoder Challenge 29 D. 不上升序列
- [堆] hihoCoder Challenge 29 D. 不上升序列
- hiho-hihoCoder挑战赛29-A-序列的值
- hiho-hihoCoder挑战赛29-B-快速乘法
- hihoCoder挑战赛29
- hihocoder#1529 : 不上升序列&&Codeforces-713C:Sonya and Problem Wihtout a Legend(思维)
- Hihocoder 挑战赛
- 最长不上升子序列
- 最长不上升子序列
- hihoCoder挑战赛14-1223
- hihoCoder挑战赛14-1224
- hihoCoder挑战赛20
- hihoCoder挑战赛20 题解
- hihoCoder挑战赛 one
- hihoCoder挑战赛22 笔记
- hihocoder挑战赛20小记
- 集训第三天,打卡
- PHP+TP框架生成使用微信JS-SDK所需的配置信息,并验证
- tomcat和HTTP协议详解
- 20170626 Linux Window System infrastructure
- 嵌入式linux网络编程之I/O多路复用select
- hiho-hihoCoder挑战赛29-D-不上升序列
- 连续整数的和
- Spring Boot : 自动JSON转换和热部署(二)
- bzoj 1704: [Usaco2007 Mar]Face The Right Way 自动转身机
- Android源码下载和编译
- Oracle删除当前用户下的所有表、视图、序列、函数、存储过程、包
- Soot:从头创建一个类
- 算法十七周解题报告
- MongoDB入门