1588: [HNOI2002]营业额统计

Time Limit: 5 SecMemory Limit: 162 MB

Description

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

Input

第一行为正整数 ,表示该公司从成立一直到现在的天数,接下来的n行每行有一个整数(有可能有负数) ,表示第i天公司的营业额。

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

此题数据有问题,详见讨论版http://www.lydsy.com/JudgeOnline/wttl/wttl.php?pid=1588

【题解】

用平衡树来维护插入等操作即可。

平衡树第二题 AC

事实证明,zig,zag分开来写会更快=-=

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=40010;
 4 int fa[N],ch[N][2],root,k[N],ind=1;
 5 void zig(int x) {
 6     int y=fa[x],z=fa[y];
 7     fa[y]=x;
 8     fa[x]=z;
 9     ch[y][0]=ch[x][1],fa[ch[x][1]]=y,ch[x][1]=y;
10     if (y==ch[z][0]) ch[z][0]=x;
11     else ch[z][1]=x;
12     //size[y]=size[ch[y][0]]+size[ch[y][1]]+1;
13 }
14 void zag(int x) {
15     int y=fa[x],z=fa[y];
16     fa[y]=x,fa[x]=z;
17     ch[y][1]=ch[x][0],fa[ch[x][0]]=y,ch[x][0]=y;
18     if (y==ch[z][0]) ch[z][0]=x;
19     else ch[z][1]=x;
20     //size[y]=size[ch[y][0]]+size[ch[y][1]]+1;
21 }
22 void splay(int x,int s) {
23     while (fa[x]!=s) {
24         int y=fa[x],z=fa[y];
25         if (z==s) {
26             if (x==ch[y][0]) zig(x);
27             else zag(x);
28             break;
29         }
30         if (y==ch[z][0]) {
31             if (x==ch[y][0]) zig(y),zig(x);
32             else zag(x),zig(x);
33         }
34         else {
35             if (x==ch[y][1]) zag(y),zag(x);
36             else zig(x),zag(x);
37         }
38     }
39     //size[x]=size[ch[x][0]]+size[ch[x][1]]+1;
40     if (s==0) root=x;
41 }
42 inline void newnode(int &x,int fax,int key) {
43     x=++ind;
44     ch[x][0]=ch[x][1]=0;
45     fa[x]=fax;
46     k[x]=key;
47 }
48 inline int search(int w) {
49     int p,x=root;
50     while(x) {
51         p=x;
52         if(k[x]>w) x=ch[x][0];
53         else x=ch[x][1];
54     }
55     return p;
56 }
57 inline void ins(int w){
58     if (root==0) {
59         newnode(root,0,w);
60         return ;
61     }
62     int i=search(w);
63     if(w<k[i]) newnode(ch[i][0],i,w);
64     else newnode(ch[i][1],i,w);
65     splay(ind,0);
66 }
67 inline int pre(int x) {
68     int tmp=ch[x][0];
69     while(ch[tmp][1]) tmp=ch[tmp][1];
70     return k[tmp];
71 }
72 inline int suc(int x) {
73     int tmp=ch[x][1];
74     while(ch[tmp][0]) tmp=ch[tmp][0];
75     return k[tmp];
76 }
77 int main() {
78     int n,t,ans=0;
79     scanf("%d%d",&n,&t);
80     root=1;k[root]=t;
81     ch[root][0]=ch[root][1]=0;
82     fa[root]=0;//printf("hhh");
83     ans=t;ins(2100000);
84     ins(-2100000);
85     for (int i=2;i<=n;++i) {
86         if(scanf("%d",&t)==EOF) t=0;
87         ins(t);
88         int a=pre(root),b=suc(root);
89         ans+=min(t-a,b-t);
90     }
91     printf("%d\n",ans);
92     return 0;
93 }

View Code

转载于:https://www.cnblogs.com/TonyNeal/p/bzoj1588.html

[BZOJ 1588] [HNOI 2002] 营业额统计相关推荐

  1. [BZOJ 1588][HNOI 2002] 营业额统计

    这果然是在那个没有STL的年代出的题 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 16648  Solv ...

  2. HNOI 2002 营业额统计(Splay树)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 6923  Solved: 2286 [Submit][St ...

  3. HNOI 2002 营业额统计

    评测地点:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 简单题,splay 题意: 按顺序给出一些数,找出距离当前数最近的数的差,将这些差求 ...

  4. CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计

    CJOJ 1308 [HNOI 2002 ]营业额统计 / CodeVS 1296 营业额统计 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并 ...

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

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

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

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

  7. HYSBZ 1588 营业额统计 伸展树

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 题意: Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任 ...

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

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

  9. bzoj1588 [HNOI2002]营业额统计

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

最新文章

  1. 关于textarea包在div的自适应问题
  2. [ubuntu] chromium不断自己刷新问题
  3. 被清华免试录取的围棋天才,横扫60位围棋大师的最强AI,竟然都输给了高中生!?...
  4. win10计算器_从0开始自制计算器!
  5. python 实现 pdf 书签读取、批量写入
  6. 普通IO口红外线接收(不用外部中断)
  7. androidnbsp;框架构图
  8. 3dsMax学习笔记06_用VRayMtl材质制作室外雕塑
  9. 从SS7到VOIP sip
  10. html中自定义右键菜单功能,HTML中自定义右键菜单功能
  11. uboot i2c 操作函数记录
  12. jsp的内置对象有哪些,四大作用域有哪些??
  13. 524. 愤怒的小鸟
  14. leg_detector包随机森林训练(修改自leg_detector中的train_leg_detector.cpp)
  15. 《人民的名义》之陆毅的演技
  16. IPC 进程间通讯,排队输出--day33
  17. ABB Advance 助力可再生能源超级电网
  18. 陈宝存:追求财富不可耻,羡慕嫉妒恨才可耻(转)
  19. 开源并不是大牛的专属,普通人也能有属于自己的一亩三分地
  20. 【第 07 章 基于主成分分析的人脸二维码识别MATLAB深度学习实战案例】

热门文章

  1. mysql函数和索引冲突问题_Mysql索引常见问题汇总
  2. Linux C语言结构体
  3. CocosCreator1.x实现水流动的效果
  4. 塞尔达盾反机器人_微软商店惊现《塞尔达传说:旷野之息》!任天堂暗示《喷射战士3》?| Jump简报...
  5. linux中多进程调试,linux下用gdb调试多进程
  6. html中写css代码,开发DIV CSS时 先写CSS代码还是先写HTML代码
  7. python内存管理方法_Python 内存管理大揭秘
  8. nacos 本地测试_Nacos集群配置实例(windows下测试)
  9. linux6.2 网络yum,配置RHEL6.2的YUM源
  10. java 的简单代码_java初学 简单代码