P2234 [HNOI2002]营业额统计——set
创始人
2024-03-28 23:44:05
0

[HNOI2002]营业额统计

题目描述

Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。

Tiger 拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况:当最小波动值越大时,就说明营业情况越不稳定。

而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助 Tiger 来计算这一个值。

我们定义,一天的最小波动值 = min⁡{∣该天以前某一天的营业额−该天营业额∣}\min\{|\text{该天以前某一天的营业额}-\text{该天营业额}|\}min{∣该天以前某一天的营业额−该天营业额∣}。

特别地,第一天的最小波动值为第一天的营业额。

输入格式

第一行为正整数 nnn(n≤32767n \leq 32767n≤32767) ,表示该公司从成立一直到现在的天数,接下来的 nnn 行每行有一个整数 aia_iai​(∣ai∣≤106|a_i| \leq 10^6∣ai​∣≤106) ,表示第 iii 天公司的营业额,可能存在负数。

输出格式

输出一个正整数,即每一天最小波动值的和,保证结果小于 2312^{31}231。

样例 #1

样例输入 #1

6
5
1
2
5
4
6

样例输出 #1

12

提示

结果说明:5+∣1−5∣+∣2−1∣+∣5−5∣+∣4−5∣+∣6−5∣=5+4+1+0+1+1=125+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=125+∣1−5∣+∣2−1∣+∣5−5∣+∣4−5∣+∣6−5∣=5+4+1+0+1+1=12

分析

  1. 除了第一天,其他天的最小波动值是 他之前的所有天其中一天与其今日营业额的差值取最小值,就是今天的最小波动值;所以需要想到排序今天之前的所有天,我们可以借助于set,来自动帮我们排序;
  2. lower_bound函数,去找到第一个>=x的位置(返回值是迭代器);然后会出现两种情况,要么==x,那就不用做任何处理;要么>x,所以我们取x与他两边的差值的最小值即可;
  3. 需要注意对set做个边界处理,比如 set已有的内容为:1 3 4 5,现在正处理某一天的营业额x,x=15,那么就在set找不到大于等于15的数,就会出错;同理当t指的是set的第一个数,迭代器t–,可能会越界; s.insert(1e7); s.insert(-1e7);
#includeusing namespace std;int n, x, ans;
set s;int main() {cin >> n;//做个边界处理s.insert(1e7);s.insert(-1e7);//第一月特处cin >> ans;s.insert(ans);for (int i = 1; i < n; ++i) {cin >> x;set::iterator t = s.lower_bound(x);//第一个>=x的位置if (*t == x) {//可以省去,但是这是下面为啥写else的原因//ans+=0//s.insert(x); 加了也会自动去重} else {int t1 = *t;t--;int t2 = *t;ans += min(abs(t1 - x), abs(t2 - x));s.insert(x);}}cout << ans;return 0;
}

相关内容

热门资讯

中证A500ETF摩根(560... 8月22日,截止午间收盘,中证A500ETF摩根(560530)涨1.19%,报1.106元,成交额...
A500ETF易方达(1593... 8月22日,截止午间收盘,A500ETF易方达(159361)涨1.28%,报1.104元,成交额1...
何小鹏斥资约2.5亿港元增持小... 每经记者|孙磊    每经编辑|裴健如 8月21日晚间,小鹏汽车发布公告称,公司联...
中证500ETF基金(1593... 8月22日,截止午间收盘,中证500ETF基金(159337)涨0.94%,报1.509元,成交额2...
中证A500ETF华安(159... 8月22日,截止午间收盘,中证A500ETF华安(159359)涨1.15%,报1.139元,成交额...
科创AIETF(588790)... 8月22日,截止午间收盘,科创AIETF(588790)涨4.83%,报0.760元,成交额6.98...
创业板50ETF嘉实(1593... 8月22日,截止午间收盘,创业板50ETF嘉实(159373)涨2.61%,报1.296元,成交额1...
港股异动丨航空股大幅走低 中国... 港股航空股大幅下跌,其中,中国国航跌近7%表现最弱,中国东方航空跌近5%,中国南方航空跌超3%,美兰...
电网设备ETF(159326)... 8月22日,截止午间收盘,电网设备ETF(159326)跌0.25%,报1.198元,成交额409....
红利ETF国企(530880)... 8月22日,截止午间收盘,红利ETF国企(530880)跌0.67%,报1.034元,成交额29.0...