1588: [HNOI2002]营业额统计

Time Limit: 5 Sec  Memory Limit: 162 MB
Submit: 6923  Solved: 2286
[Submit][Status]

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树的插入题

代码:

#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;struct node{int father,left,right,data;
}tree[100008];
int time=0,n,root,sum=0;void rightrotate(int x)
{  int y=tree[x].father;   int z=tree[y].father;  tree[y].left=tree[x].right;  if(tree[x].right!=-1){tree[tree[x].right].father=y;}  tree[x].father=z;  if(z!=-1){if(tree[z].left==y)   tree[z].left=x;else   tree[z].right=x;}  tree[x].right=y;   tree[y].father=x;
}void leftrotate(int x)
{  int y=tree[x].father;   int z=tree[y].father;  tree[y].right=tree[x].left;  if(tree[x].left!=-1){tree[tree[x].left].father=y;}  tree[x].father=z;  if(z!=-1){if(tree[z].left==y)   tree[z].left=x;else   tree[z].right=x;}  tree[x].left=y;   tree[y].father=x;
}void splay(int x)
{  while(tree[x].father!=-1)  {  int y=tree[x].father;  int z=tree[y].father;  if(z==-1){  if(tree[y].left==x)   rightrotate(x);else   leftrotate(x);  }  else  {  if(tree[z].left==y&&tree[y].left==x){rightrotate(y);   rightrotate(x);}  else if(tree[z].left==y&&tree[y].right==x){leftrotate(x);   rightrotate(x);}  else if(tree[z].right==y&&tree[y].right==x){leftrotate(y);   leftrotate(x);}  else {rightrotate(x);   leftrotate(x);}  }}  root=x;
}int qq(int x)
{  int y=tree[x].left;   if(y==-1)   return -1;  while(tree[y].right!=-1)   y=tree[y].right;  return y;
}int hj(int x)
{  int y=tree[x].right;   if(y==-1)   return -1;  while(tree[y].left!=-1)   y=tree[y].left;  return y;
}bool BST_insert(int dat,int x)
{  if(dat==tree[x].data){splay(x);//提升到根节点 return false;}  if(dat<tree[x].data)  {  if(tree[x].left==-1){tree[x].left=time;  tree[time].father=x;tree[time].left=tree[time].right=-1;   tree[time].data=dat;return true; }  else BST_insert(dat,tree[x].left);  }  else  {  if(tree[x].right==-1){tree[x].right=time;   tree[time].father=x;tree[time].left=tree[time].right=-1;   tree[time].data=dat;return true;}  else BST_insert(dat,tree[x].right);  }
}
void insert(int dat)
{  time++;   if(!BST_insert(dat,root))   return ;  splay(time);  int q=qq(time);  int h=hj(time);  int Min=100000000;  if(q!=-1)   Min=min(Min,abs(tree[q].data-dat));  if(h!=-1)   Min=min(Min,abs(tree[h].data-dat));  sum+=Min;
}  int main()
{   int n,a1;  while(scanf("%d",&n)!=-1){  sum=0;   time=0;  scanf("%ld",&a1);  sum=a1;   time++;   tree[time].father=-1;  tree[time].left=tree[time].right=-1;  tree[time].data=a1;   root=time;  for(int i=1;i<=n-1;i++)  {  int dats=0;   scanf("%ld",&dats);insert(dats);  }  printf("%ld\n",sum);}return 0;
}         

HNOI 2002 营业额统计(Splay树)相关推荐

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

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

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

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

  3. HNOI 2002 营业额统计

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

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

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

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

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

  6. HYSBZ - 1588 营业额统计(Splay)

    题目链接:点击查看 题目大意:给出 n 天的销售额,每天的销售额都需要与前面所有天中,找到与自己相差最小的销售额,并累加其差值的绝对值,输出累加后的答案 题目分析:其实用set乱搞就可以了,为了练习数 ...

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

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

  8. treap树---营业额统计

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

  9. [Splay伸展树]splay树入门级教程

    首先声明,本教程的对象是完全没有接触过splay的OIer,大牛请右上角.. 首先引入一下splay的概念,他的中文名是伸展树,意思差不多就是可以随意翻转的二叉树 PS:百度百科中伸展树读作:BoGa ...

最新文章

  1. RH5.4下samba共享配置实例(3)
  2. 遍历List 删除某条数据
  3. Go语言实战读书笔记
  4. linux 修改用户组_linux小白到大神的成长之路:linux系统用户组的管理!
  5. 家用、商用、工业交换机的用途与区别
  6. 总有一些人在祖国需要的时候挺身而出
  7. 分治 —— 莫队算法
  8. php青茶什么时候拆,茶叶保质期多长时间 黑绿红白黄青茶的保质期为多久
  9. ssms应用程序错误_来自应用程序的查询计划与SSMS不同时的性能故障排除
  10. Memcached源码分析 - 内存存储机制Slabs(5)
  11. 女程序员上班第一件事:调整IDE颜色以适配今天的衣着妆容
  12. jQuery设置文本框回车事件
  13. 圈小猫游戏与天使问题——容错值理论
  14. Python实现多条.txt文本数据合并为.csv文件数据
  15. PCI Expansion ROMs
  16. 系统封装到底有个什么用
  17. iphone计算机设置,苹果手机怎么设置其他铃声
  18. 华为推送 简介 集成 MD
  19. 服务器怎么使用无线网卡,无线上网卡怎么用
  20. 编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算

热门文章

  1. 企业资产价值最大化,教你一个方法
  2. 大学生综合评测系统(C语言)
  3. 海量数据的KNN分类、Kmeans聚类
  4. 专业文件对比工具:Beyond Compare 4.2.7
  5. 解决移动端line-height不居中问题
  6. 数据分析师成长记(一):如何让你的数据处理更加专业而高效?
  7. 快鲸智慧社区系统的应用场景有哪些
  8. 不喜欢的工作,可能通往一个崭新世界
  9. ZEMAX | 室内照明案例分享1 :照度分布的模拟
  10. WIFI基础知识整理