BZOJ 1588 营业额统计
Description
营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况: 该天的最小波动值 当最小波动值越大时,就说明营业情况越不稳定。 而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。 第一天的最小波动值为第一天的营业额。 输入输出要求
Input
第一行为正整数 ,表示该公司从成立一直到现在的天数,接下来的n行每行有一个整数(有可能有负数) ,表示第i天公司的营业额。
Output
输出文件仅有一个正整数,即Sigma(每天最小的波动值) 。结果小于2^31 。
Sample Input
5
1
2
5
4
6
Sample Output
HINT
结果说明:5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12
#include<cstdio>
#include<cstdlib>
#include<cmath>
using namespace std;
#define maxn 33000
int n,share[maxn];
int lc[maxn],rc[maxn],father[maxn],root,ans; inline int small(int a,int b) {if (a < b) return a; return b;} inline void work();
inline void zig(int);
inline void zag(int);
inline int find(int);
inline void ins(int);
inline void splay(int); int main()
{
freopen("1588.in","r",stdin);
freopen("1588.out","w",stdout);
scanf("%d",&n);
int i;
for (i = ;i<=n;i++)
scanf("%d",share+i);
work();
printf("%d",ans);
fclose(stdin); fclose(stdout);
return ;
} inline int find(int a)
{
int ret = ,now = root;
ret = small(abs(share[now]-a),ret);
now = rc[root];
while (now > )
{
if (share[now] == a)
return ;
ret = small(abs(share[now]-a),ret);
if (share[now] > a)
now = rc[now];
else now = lc[now];
}
now = lc[root];
while (now > )
{
if (share[now] == a)
return ;
ret = small(abs(share[now]-a),ret);
if (share[now] > a)
now = rc[now];
else now = lc[now];
}
return ret;
} inline void work()
{
ans = share[]; root = ;
int i,j,k;
for (i = ;i<=n;i++)
{
k = find(share[i]);
ans += k;
if (k != )
ins(i);
}
} inline void ins(int a)
{
int last,now;
now = root;
while (now != )
{
last = now;
if (share[now] > share[a])
now = rc[now];
else now = lc[now];
}
father[a] = last;
if (share[a] > share[last])
lc[last] = a;
else rc[last] = a;
splay(a);
root = a;
} inline void zig(int x)
{
int y = father[x];
father[x] = father[y];
if (father[y] != )
{
if (lc[father[y]] == y)
lc[father[y]] = x;
else rc[father[y]] = x;
}
father[y] = x;
lc[y] = rc[x];
if (rc[x] != )
father[rc[x]] = y;
rc[x] = y;
} inline void zag(int x)
{
int y = father[x];
father[x] = father[y];
if (father[y] != )
{
if (lc[father[y]] == y)
lc[father[y]] = x;
else rc[father[y]] = x;
}
father[y] = x;
rc[y] = lc[x];
if (lc[x] != )
father[lc[x]] = y;
lc[x] = y;
} inline void splay(int a)
{
while (father[a] != )
{
if (father[father[a]] == )
{
if (a == lc[father[a]])
zig(a);
else zag(a);
}
else
{
if (lc[father[father[a]]]==father[a] && lc[father[a]] == a)
{
zig(father[a]),
zig(a);
}
else if (lc[father[father[a]]]==father[a] && rc[father[a]] == a)
{
zag(a);
zig(a);
}
else if (rc[father[father[a]]]==father[a] && lc[father[a]] == a)
{
zig(a);
zag(a);
}
else if (rc[father[father[a]]]==father[a] && rc[father[a]] == a)
{
zag(father[a]);
zag(a);
}
}
}
}
BZOJ 1588 营业额统计的更多相关文章
- BZOJ 1588 营业额统计 set
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1588 题目大意: 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交 ...
- (HYSBZ)BZOJ 1588 营业额统计
营业额统计 Time Limit: 5000MS Memory Limit: 165888KB 64bit IO Format: %lld & %llu Description 营业额 ...
- bzoj 1588营业额统计(HNOI 2002)
http://www.lydsy.com/JudgeOnline/problem.php?id=1588 splay bottom-up的数组实现. 题意就是给你一组数,求每个数与在其前面且与其最相 ...
- BZOJ 1588 营业额统计 Splay
主要操作为Splay中插入节点,查找前驱和后继节点. 1: #include <cstdio> 2: #include <iostream> 3: #include <c ...
- [bzoj] 1588 营业额统计 || Splay板子题
原题 给出一个n个数的数列ai ,对于第i个元素ai定义\(fi=min(|ai-aj|) (1<=j<i)\),f1=a1,求\(/sumfi\) Splay板子题. Splay讲解:h ...
- HYSBZ - 1588 营业额统计 (伸展树)
题意:营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营 ...
- HYSBZ 1588 营业额统计
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 题意:详见题面,中文 思路:平衡树的模板题. 可用Treap,Splay,Scape ...
- HYSBZ 1588 营业额统计 (Splay树)
题意:给出一个公司每一天的营业额,求每天的最小波动值之和.该天的最小波动值= min { 绝对值| 该天以前某一天的营业额-该天的营业额 | }.第一天的最小波动值就是其自己. 思路:Splay伸展树 ...
- BZOJ 1588: [HNOI2002]营业额统计 双向链表
BZOJ 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 512 MBSubmit: 9619 Solved: 3287 题目连接 ht ...
随机推荐
- visual studio 2015 企业版 序列号及官方下载地址
VisualStudio 2015 正式版已经可以通过官方下载了. Visual Studio 是一套基于组件的软件开发工具和其他技术,可用于构建功能强大.性能出众的应用程序.Visual Studi ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(47)-工作流设计-补充
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(47)-工作流设计-补充 系列目录 补充一下,有人要表单的代码,这个用代码生成器生成表Flow_Form表 ...
- OC的单例模式的实现
下面是在ARC,GCD下的单例模式实现: 头文件里申明类方法getInstance: #import <Foundation/Foundation.h> @interface Single ...
- [Android 中级]Voip之CSipSimple类库的编绎
CSipSimple是什么?是一款基于pjsip的Android客户端,相信想要研究VOIP通讯的朋友一定不会陌生,这里我就把如何编译CSipSimple写下来. 首先从CSipSimple官方网站上 ...
- (转载)Java 1.7的新特性
网上找了一下,整理了贴出来. 下面是Java 1.7 里新出现的功能的一些用法例子: 对集合的支持 摒弃了 Java 集合接口的实现类,如: ArrayList . HashSet 和 HashMap ...
- C# 各种集合
大多数集合都在 System.Collections,System.Collections.Generic两个命名空间. 其中System.Collections.Generic专门用于泛型集合. ...
- 设置ORACLE环境变量
sqlplus 执行不了可能原因是未设置环境变量,设置方法: export ORACLE_HOME=/usr/local/instantclient_11_2
- .Net framework.
Figure 1 - .Net Framework The Common Language Runtime (CLR) is the mechanism through which .NET code ...
- OpenCart 之registry功用
1. “Registry”设计模式 在OpenCart中,Registry是整个系统的信息中枢. Registry是一个单例(Singleton),在index.php起始页面中, 首先作为构造函数参 ...
- (一)Nodejs - 框架类库 - Nodejs异步流程控制Async
简介 Async是一个流程控制工具包,提供了直接而强大的异步功能 应用场景 业务流程逻辑复杂,适应异步编程,减少回调的嵌套 安装 npm insatll async 函数介绍 Collections ...