Time Limit: 5 Sec Memory Limit: 162 MB
Submit: 18891 Solved: 7956
[Submit][Status][Discuss]
Description

营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况: 该天的最小波动值 当最小波动值越大时,就说明营业情况越不稳定。 而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。 第一天的最小波动值为第一天的营业额。  输入输出要求

Input

第一行为正整数 ,表示该公司从成立一直到现在的天数,接下来的n行每行有一个整数(有可能有负数) ,表示第i
天公司的营业额。
天数n<=32767,
每天的营业额ai <= 1,000,000。
最后结果T<=2^31
Output

输出文件仅有一个正整数,即Sigma(每天最小的波动值) 。结果小于2^31 。

Sample Input

6

5

1

2

5

4

6
Sample Output

12

HINT

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

题解

调了一个多小时,发现是个逗比错误。。。其实挺简单的,只要维护一棵平衡树,每次查询前驱和后继即
可,我用的是splay

代码

#include<bits/stdc++.h>using namespace std;
const int MAXN = 33000;
const int inf = 1<<30;inline int rd(){int x=0,f=1;char ch=getchar();while(ch>'9' || ch<'0') {if(ch=='-') f=-1;ch=getchar();}while(ch<='9' && ch>='0') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}struct Splay{int tot,fa[MAXN],ch[MAXN][2];int val[MAXN];int root;inline bool check(int x){return (x==ch[fa[x]][1]);}inline void rotate(int x){int y=fa[x],z=fa[y];bool chk=check(x);fa[ch[x][chk^1]]=y;ch[y][chk]=ch[x][chk^1];ch[x][chk^1]=y;fa[y]=x;fa[x]=z;if(z) ch[z][ch[z][1]==y]=x;}inline void splay(int x){for(int f=fa[x];f;rotate(x),f=fa[x])    if(fa[f]) rotate(check(x)==check(f)?f:x);root=x;}inline bool insert(int x){if(!root){val[++tot]=x;root=tot;return true;}int now=root,f=0;while(1){
//          cout<<1<<endl;if(val[now]==x){splay(now);return false;} f=now;now=ch[now][val[now]<x];
//          cout<<now<<endl;if(!now){val[++tot]=x;ch[f][val[f]<x]=tot;fa[tot]=f;splay(tot);return true;}}}inline int get_prev(){int cur=ch[root][0];while(ch[cur][1]) cur=ch[cur][1];return cur;}inline int get_nxt(){int cur=ch[root][1];while(ch[cur][0]) cur=ch[cur][0];return cur;}
}tree;int n;
int ans;int main(){n=rd();int x;tree.insert(inf);tree.insert(-inf);x=rd();ans=x;tree.insert(x);
//  cout<<tree.root<<" "<<x<<endl;for(register int i=2;i<=n;i++) {x=rd();if(!tree.insert(x)) continue;int pre=tree.val[tree.get_prev()];int nxt=tree.val[tree.get_nxt()];
//      cout<<x<<" "<<pre<<" "<<nxt<<endl;ans+=min(nxt-x,x-pre);
//      cout<<"ans"<<" "<<ans<<endl;}printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/sdfzsyq/p/9677039.html

BZOJ1588: [HNOI2002]营业额统计相关推荐

  1. bzoj1588[HNOI2002]营业额统计

    bzoj1588[HNOI2002]营业额统计 题意: n天,每天得到一个值,要求输出每一天和这天得到的值相差最小的之前天得到的值与这个值的差的和.n不知道,不过O(nlog2n)可写. 题解: 说是 ...

  2. 【链表】BZOJ1588: [HNOI2002]营业额统计

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 17555  Solved: 7179 [Submit][S ...

  3. bzoj1588 [HNOI2002]营业额统计

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 17931  Solved: 7391 [Submit][S ...

  4. 洛谷p2234/BZOJ1588 [HNOI2002]营业额统计

    题目链接: 洛谷 BZOJ 分析: 好像没有什么好说的就是一个平衡树的板子--唯一要注意的就是这里要找的并不是严格的前驱和后继,因为如果找到之前某一天的营业额和它相等那么差就是0,所以我们仍然在结构体 ...

  5. bzoj1588[HNOI2002]营业额统计——双向链表

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1588 简单Splay.但用双向链表做.很好的思路. 1.(离线)按值排序,记下pre和nxt ...

  6. P2234 [HNOI2002]营业额统计

    P2234 [HNOI2002]营业额统计 这题没有用splay写,罪过 就是找一下前驱与后继,然后判断一下这个值出现没出现过 判重就是最暴力的拿数组判断就可以了 只不过,值有可能为负数,所以整体平移 ...

  7. [HNOI2002]营业额统计 Splay tree入门题

    [HNOI2002]营业额统计 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 [HNOI2002]营业额统计 Time Limit ...

  8. BZOJ 1588: [HNOI2002]营业额统计

    Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...

  9. 1588: [HNOI2002]营业额统计 - BZOJ

    Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...

  10. 洛谷P2234 [HNOI2002]营业额统计(01Tire树)

    题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...

最新文章

  1. 崛起于Springboot2.X之Mybatis-全注解方式操作Mysql(4)
  2. TRzCheckTree的使用
  3. Codeforces Round #278 (Div. 2)
  4. Android学习笔记:Activity-ListView
  5. 评分卡模型剖析之一(woe、IV、ROC、信息熵)
  6. linux看3D实景
  7. 【Python】全方面解读Python的格式化输出
  8. C++ STL map的使用
  9. lucene索引的删除和更新
  10. 模块-from import导入所有工具
  11. [USACO17JAN]Promotion Counting 题解
  12. 使用Datastax Java驱动程序与Cassandra进行交互
  13. 学法减分小程序可用可运营源码附带安装教程
  14. 解决 QQ2006 键盘加密造成的系统当机故障
  15. 考不上本科就是低智商?用python爬3000条数据狠打脸
  16. IO中的阻塞、非阻塞、同步、异步概念分析详解(通俗易懂)
  17. linux中逻辑块大小为,Linux 文件系统相关的基本概念
  18. mysql开发认证 cmdev_学无止境:了解主流的DBA认证考试
  19. ubuntu系统各pdf编辑器的使用体验和比较
  20. Unity-瓦片地图详解

热门文章

  1. 新来的妹子把几百万数据放入了内存,系统立马爆了,我不得已做到了妹子傍边,手把手教妹子...
  2. 蛋疼! 注意了,千万不要在 MySQL 中使用 UTF-8
  3. 区块链:一场始料未及的革命
  4. 运维必看:2017 年 Python 大事件年度盘点!
  5. macOS 爆严重安全漏洞,不用密码就能随意登录(附解决方案)
  6. python类 析构方法
  7. [TJOI2015]弦论(后缀数组or后缀自动机)
  8. 关于Linux不能ping通外网的解决方法
  9. POJ 2104 K-th Number (区间第k大)
  10. db2官方SQLSTATE代码提示