[HNOI2002]营业额统计

Time Limit: 5 Sec  Memory Limit: 162 MB
Submit: 4128  Solved: 1305

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

 

splay

看着就晕,姑且半抄着代码写了下来,以后慢慢刷熟练度好了

  1. /**/
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. int INF=;
  9. const int mxn=;
  10. int v[mxn],ch[mxn][],fa[mxn],root=,cnt=;
  11. int t1,t2;
  12. int n;
  13. void rotate(int x,int &k){
  14. int y=fa[x],z=fa[y];
  15. int l,r;
  16. if(ch[y][]==x) l=; else l=;
  17. r=l^;
  18. if(y==k)k=x;
  19. else{
  20. if(ch[z][]==y) ch[z][]=x;
  21. else ch[z][]=x;
  22. }
  23. fa[x]=z;fa[y]=x;fa[ch[x][r]]=y;
  24. ch[y][l]=ch[x][r];
  25. ch[x][r]=y;
  26. }
  27. void splay(int x,int &k){
  28. int y,z;
  29. while(x!=k){
  30. y=fa[x];z=fa[y];
  31. if(y!=k){
  32. if((ch[y][]==x)^(ch[z][]==y))rotate(x,k);
  33. else rotate(y,k);
  34. }
  35. rotate(x,k);
  36. }
  37. return;
  38. }
  39. void insert(int &k,int val,int father){
  40. if(!k){
  41. k=++cnt;
  42. v[k]=val;
  43. fa[k]=father;
  44. splay(k,root);
  45. return;
  46. }
  47. if(val<v[k]) insert(ch[k][],val,k);
  48. else if(val>v[k]) insert(ch[k][],val,k);
  49. }
  50. void ask_1(int k,int x){//求前驱
  51. if(!k)return;
  52. if(x>=v[k]){
  53. t1=v[k];
  54. ask_1(ch[k][],x);
  55. }else ask_1(ch[k][],x);
  56. return;
  57. }
  58. void ask_2(int k,int x){//求前驱
  59. if(!k)return;
  60. if(x<=v[k]){
  61. t2=v[k];
  62. ask_2(ch[k][],x);
  63. }else ask_2(ch[k][],x);
  64. return;
  65. }
  66. int main(){
  67. scanf("%d",&n);
  68. int i,j,x;
  69. bool first=;
  70. int ans=;
  71. for(i=;i<=n;i++){
  72. scanf("%d",&x);
  73. t1=-INF;
  74. t2=INF;
  75. if(first){
  76. first=;
  77. ans+=x;
  78. }
  79. else {
  80. ask_1(root,x);
  81. ask_2(root,x);
  82. ans+=min(x-t1,t2-x);
  83. }
  84. insert(root,x,);
  85. }
  86. printf("%d\n",ans);
  87. return ;
  88. }

BZOJ1588 HNOI2002 营业额统计 [Splay入门题]的更多相关文章

  1. BZOJ1588 [HNOI2002]营业额统计 splay模板

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

  2. bzoj1588: [HNOI2002]营业额统计(splay)

    1588: [HNOI2002]营业额统计 题目:传送门 题解: 复习splay所以来刷个水... 题目描述不是特别清楚:应该是找第i天以前一个最小的营业额和第i天做差的最小值作为第i天的最小波动值 ...

  3. [bzoj1588][HNOI2002]营业额统计——splay

    题目大意 你被要求编写一个数据结构,支援以下操作,操作在线. 插入一个元素 查询一个元素与之前插入元素的最小差值. 题解 一道模板题.我是写了一个pre和succ函数水过的.1A,比较高兴. 代码 # ...

  4. bzoj1588: [HNOI2002]营业额统计 splay瞎写

    最近各种瞎写数论题,感觉需要回顾一下数据结构 写一发splay冷静一下(手速过慢,以后要多练练) 用splay是最直接的方法,但我感觉离散一波应该可以做出来(没仔细想过) 现在没有很追求代码优美,感觉 ...

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

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

  6. 【BZOJ-1588】营业额统计 Splay

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 12485  Solved: 4508[Submit][Sta ...

  7. Bzoj 1588: [HNOI2002]营业额统计(splay)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上 ...

  8. BZOJ1588: [HNOI2002]营业额统计[BST]

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 14151  Solved: 5366[Submit][Sta ...

  9. bzoj1588 [HNOI2002]营业额统计(Treap)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 11485  Solved: 4062[Submit][Sta ...

随机推荐

  1. 项目管理工具Redmine各功能测试

      Redmine 是一个开源的.基于Web的项目管理和缺陷跟踪工具.它用日历和甘特图辅助项目及进度可视化显示.同时它又支持多项目管理.Redmine是一个自由开放 源码软件解决方案,它提供集成的项目 ...

  2. git rebase 介绍

    git rebase是对commit history的改写.当你要改写的commit history还没有被提交到远程repo的时候,也就是说,还没有与他人共享之前,commit history是你私 ...

  3. 023医疗项目-模块二:药品目录的导入导出-从数据库中查出数据用XSSF导出excel并存放在虚拟目录最后下载(包括调试)

    我们要实现的效果:     进入到这个页面后,输入要查询的条件,查询出药品表的数据,然后按下导出按钮 ,就会在服务器的一个目录下生成一个药品表的excel表格.  点击"导出"之后 ...

  4. 错题726-java

    class Car extends Vehicle { public static void main (String[] args) { new Car(). run(); } private fi ...

  5. C# 鼠标穿透窗体功能

    通过以下代码,在窗体启动后调用方法SetPenetrate() 即可实现窗体的穿透功能. 同样该功能需要加载命名空间 using System.Runtime.InteropServices; pri ...

  6. perl 简单学习,安装perl模块

    检查是否安装了某个perl模块 有多种方式 0.perldoc perlinstall 列出所有的模块及版本号 1. perl -M模块名 -e 1(模块名不加空格) 没有返回值则说明有此模块 2.p ...

  7. 实践SQLServer Tuning

    已有的系统业务数据属性多,表之间关系紧密.单表数据量(5481 row(s) affected)级别(其中三四个主表),其他表数据量较小. 0)使用set statistics生成辅助信息参考. se ...

  8. java 顺序 读写 Properties 配置文件

    java 顺序 读写 Properties 配置文件 支持中文 不乱码 java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不 ...

  9. [USACO2005][POJ2226]Muddy Fields(二分图最小点覆盖)

    题目:http://poj.org/problem?id=2226 题意:给你一个字符矩阵,每个位置只能有"*"或者“.",连续的横着或者竖的“*"可以用一块木 ...

  10. ArrayAdapter与SimpleAdapter的使用

    在使用ListView中我们使用到adapter,android中为我们不仅提供了BaseAdapter类来让我们自定义自己的Adapter,还为我们提供了ArrayAdapter以及SimpleAd ...