2924: 营业额统计

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 389            Accepted:122

Description

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

该天的最小波动值 = min{ |该天以前某天的营业额 - 该天的营业额 | }

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

Input

测试数据多组,每组的第一行为正整数n(1 <= n <= 32767), 表示该公司从成立一直到现在的天数. 接下来的n行每行有一个整数Ai(Ai <= 1000000) , 表示第i天的营业额。处理到EOF为止。

Output

每组数据占一行,每行输出一个整数,每天最小波动值的和。结果小于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
 
思路:在出现过的数字中,找出与当前数字x差值最小的值的差值。求和。
 #include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
using namespace std;
const int N = 1e5+;
const int INF = 0x3f3f3f3f;
int pre[N] , key[N],ch[N][],root,tot1;
int n; void NewNode(int &r ,int father,int k)
{
r = ++tot1;/**保存的位置**/
pre[r] = father;
key[r] = k;
ch[r][] = ch[r][] = ;
} void Rotate(int x,int kind)
{
int y = pre[x]; // x 的父亲节点
ch[y][!kind] = ch[x][kind]; /**建立x的kind节点和父亲节点的关系**/
pre[ch[x][kind]] = y; if(pre[y]) /**建立x节点和x父亲父亲节点的关系**/
{
int k = ch[ pre[y] ] [ ] == y;
ch[pre[y]][k] = x;
}
pre[x] = pre[y]; ch[x][kind] = y; /**建立x和y的关系**/
pre[y] = x;
}
//Splay调整,将结点r调整到goal下面
void Splay(int r , int goal )
{
while(pre[r]!=goal)
{
if( pre[pre[r]] == goal ) Rotate(r,ch[pre[r]][]==r);
else
{
int y = pre[r];
int kind = ch[pre[y]][] == y; /**如果是左节点返回1。否则0。取反的kind**/ if(ch[y][kind] == r)/**r和父亲节点y的位置,和y和其y父亲节点位置不同。**/
{ /**采用 Zig-Zag或Zag-Zig操作**/
Rotate(r,!kind);
Rotate(r,kind);
}
else/**Zig-Zig或Zag-Zag操作**/
{
Rotate(y,kind);
Rotate(r,kind);
}
}
}
if(goal == ) root = r;
} int Insert(int k)
{
int r = root;
while( ch[r][key[r]<k]!=)
{
if( key[r] == k)
{
Splay(r,);
return ;
}
r = ch[r][key[r]<k];
}
NewNode(ch[r][key[r]<k],r,k);
Splay(ch[r][key[r]<k],);
return ;
} int get_pre(int x)
{
int temp = ch[x][];
if(temp == ) return INF;
while(ch[temp][])
temp = ch[temp][];
return key[x] - key[temp];
} int get_next(int x)
{
int temp = ch[x][];
if(temp == ) return INF;
while(ch[temp][])
temp = ch[temp][];
return key[temp] - key[x];
}
int main()
{
int n , x;
while(scanf("%d",&n)>)
{
root = tot1 = ;
int sum = ;
for(int i=;i<=n;i++)
{
scanf("%d",&x);
if(i==)
{
sum = sum + x;
NewNode(root,,x);
continue;
}
if(Insert(x) == ) continue;
int a = get_pre(root);
int b = get_next(root);
sum=sum+min(a,b);
}
printf("%d\n",sum);
}
return ;
}
 

NOIP 营业额统计 splay tree 纯模板的更多相关文章

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

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

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

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 5783  Solved: 1859[Submit][Stat ...

  3. [HNOI2002]营业额统计 Splay tree

    Splay tree入门题,学好代码风格,学习HH大牛的,传送门.. #include <functional> #include <algorithm> #include & ...

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

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

  5. NOI 2002 营业额统计 (splay or fhq treap)

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

  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 营业额统计 [Splay入门题]

    [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4128  Solved: 1305 Description 营业额统计 ...

  9. 洛谷P2234 [HNOI2002] 营业额统计 [splay]

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

随机推荐

  1. Ruby与Python开发的环境IDE配置(附软件的百度云链接)

    Ruby开发环境配置 1.Aptana_RadRails(提示功能不好,开发Ruby不推荐) 链接:http://pan.baidu.com/s/1i5q96K1 密码:yt04 2.Aptana S ...

  2. javascript浏览器对象

    window对象 1.window对象 window对象是BOM的核心,window对象指当前的浏览器窗口 所有JS全局对象.函数以及变量均自动成为window对象的成员 全局变量是window对象的 ...

  3. PHP5各个版本的新功能和新特性总结(转载 http://www.jb51.net/article/48150.htm)

    本文目录:PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束PHP5.2:JSON 支持PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredo ...

  4. 广告点击率 CTR预估中GBDT与LR融合方案

    http://www.cbdio.com/BigData/2015-08/27/content_3750170.htm 1.背景 CTR预估,广告点击率(Click-Through Rate Pred ...

  5. 给uefi引导的方式安装archlinux

    基本就是照着官方的wiki来的,不过官方的wiki的内容太杂了,或许我们需要的是一个瀑布似的流程. 其实大体上与mbr引导的方式类似,只凭借回忆说一下有区别的地方,等下一次有机会的时候再验证一下. 换 ...

  6. 新发现了一个编辑器HBuilder,感觉蛮好的,关键是国产软件。

    http://www.dcloud.io/

  7. Delphi 线程同步技术(转)

    上次跟大家分享了线程的标准代码,其实在线程的使用中最重要的是线程的同步问题,如果你在使用线程后,发现你的界面经常被卡死,或者无法显示出来,显示混乱,你的使用的变量值老是不按预想的变化,结果往往出乎意料 ...

  8. divcss5布局

    一.ie9不支持line-height字体垂直居中兼容问题    原因:CSS中使用了中文字体,而中文字体使用汉字.如:font-family:"微软雅黑"   1.将中文字体汉字 ...

  9. 为什么super()和this()调用语句不能同时在一个构造函数中出现的解释

    我想这应该是Java构造函数的一种机制吧,首先以子类和父类为例.当你创建一个子类的实例时,首先会调用父类的构造函数,然后再调用子类的构造函数,如果父类中没有缺省构造函数,则必须再子类的构造函数中显示的 ...

  10. 【python cookbook】【数据结构与算法】14.对不原生支持比较操作的对象排序

    问题:想在同一个类的实例之间做排序,但是它们并不原生支持比较操作. 解决方案:使用内建的sorted()函数可接受一个用来传递可调用对象的参数key,sorted利用该可调用对象返回的待排序对象中的某 ...