NOIP 营业额统计 splay tree 纯模板
2924: 营业额统计
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
#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 纯模板的更多相关文章
- [HNOI2002]营业额统计 Splay tree入门题
题目连接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec ...
- 1588: [HNOI2002]营业额统计 (splay tree)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 5783 Solved: 1859[Submit][Stat ...
- [HNOI2002]营业额统计 Splay tree
Splay tree入门题,学好代码风格,学习HH大牛的,传送门.. #include <functional> #include <algorithm> #include & ...
- BZOJ1588 [HNOI2002]营业额统计 splay模板
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 16189 Solved: 6482 [Submit][S ...
- NOI 2002 营业额统计 (splay or fhq treap)
Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...
- 【BZOJ-1588】营业额统计 Splay
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 12485 Solved: 4508[Submit][Sta ...
- Bzoj 1588: [HNOI2002]营业额统计(splay)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上 ...
- BZOJ1588 HNOI2002 营业额统计 [Splay入门题]
[HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 4128 Solved: 1305 Description 营业额统计 ...
- 洛谷P2234 [HNOI2002] 营业额统计 [splay]
题目传送门 营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天 ...
随机推荐
- web 前端:连接mysql中文乱码问题的解决办法
当使用tomcat部署servlet连接时,总是出现各种原因的中文乱码问题.有的是因为mysql的默认字符集的问题,有的是客户端的字符配置问题. 现在对于这两种问题进行配置,来解决乱码. 服务器端(m ...
- 压缩 & 解压缩 命令汇总:tar、zip & unzip、
1. tar命令详解 格式:tar [-cxtzjvfpPN] 文件与目录 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五 ...
- Missing artifact com.sun:tools:jar 1.5.0 终极解决方法
在使用m2eclipse插件时,在pom.xml中添加struts2-core.jar包后,需要依赖java运行时的tools.jar进行依赖.但是,此时eclipse无法读取tools包,出现如下错 ...
- yii遍历行下的每列数据(小1月考)
效果图: 控制器(1种): //显示列表 public function actionList() { //实例化对象 $model= new Qiu(); ...
- JAVA实现File类中的遍历操作并输出内容
package shb.java.testIo; import java.io.BufferedReader; import java.io.BufferedWriter; import java.i ...
- 夺命雷公狗---DEDECMS----22dedecms让A标签进入对应的内容页
我们的模版里的超链接都是写死的,这都是不符合实际网站的需求的,我们要将他让他边活的,而并非死的.. 我们首先要将前端给我们的内容页面的模版放到目标目录里面,但是我们的内容页的模版名叫啥呢?我们可以来查 ...
- 查找(顺序表&有序表)
[1]查找概论 查找表是由同一类型是数据元素(或记录)构成的集合. 关键字是数据元素中某个数据项的值,又称为键值. 若此关键字可以唯一标识一个记录,则称此关键字为主关键字. 查找就是根据给定的某个值, ...
- 三层架构中bll层把datatable转换为实体model的理解
看了很多人的项目,很多都是用到三层架构,其中BLL层中有一种将DataTable转换为实体的方法.一直没有明白为啥要这样做,今天特意去搜索了一下,如果没有答案我是准备提问,寻求解答了.还好找到一个相关 ...
- ASP.NET MVC Model验证总结【转】
一.启用客户端验证: 客户端验证主要是为了提高用户体验,在网页不回刷的情况下完成验证. 第一步是要在web.config里启用客户端验证,这在MVC3自带的模板项目中已经有了: <add key ...
- Http的常见问题
A: HTTP(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议. B: 文件传输协议FTP.电子邮件传输协议SMTP.域名系统服务DNS.HTTP协议等都同是应用层协议. C:HT ...