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 ...
随机推荐
- Python爬取CSDN博客文章
0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...
- ini格式数据生成与解析具体解释
ini格式数据生成与解析具体解释 1.ini格式数据长啥样? watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/ ...
- C 语言中 typeof keyword简单介绍
原文:http://hi.baidu.com/leowang715/blog/item/b0b96d6f972e7dd080cb4a06.html typeofkeyword是C语言中的一个新扩展.仅 ...
- [转] Android LocalService与RemoteService理解
前段时间被别人问到相关的问题,没有回答对,发现自己原来理解的有偏差,最近看了下,写了个小Demo实验了下,现在将其记录下来,以后千万别犯同样的错误就好了. 一.LocalService(本地服务) 不 ...
- 利用jpedal进行pdf转换成jpeg,jpg,png,tiff,tif等格式的图片
项目中运用到pdf文件转换成image图片,开始时使用pdfbox开源库进行图片转换,但是转换出来的文件中含有部分乱码的情况.下面是pdfBox 的pdf转换图片的代码示例. try{ String ...
- C#开发学习——内联表达式
<%@ 表示:引用 <%# 表示:绑定 <%= 表示:取值 <%= 变量名%> Response.Write()输出和<%=%>输出最后的效果是一样的 ...
- log4j中Spring控制台输出Debug级信息过多解决方法
log4j中Spring控制台输出Debug级信息过多解决方法 >>>>>>>>>>>>>>>>> ...
- rabbitmq pika connection closed
You are here: Home / rabbitmq pika connection closed rabbitmq pika connection closed By lijiejie on ...
- JavaScript正则验证数字、英文、电话号、身份证号、邮箱地址、链接地址等
验证是否为数字:/^[0-9]*$/验证是否为汉字:/^[\u4e00-\u9fa5],{0,}$/验证x-y位的数字:/^\d{x,y}$/验证由26个英文字母组成的字符串:/^[A-Za-z]+$ ...
- U3D 实现子弹发射效果
首先,这里子弹要模拟的相似的话,用2D刚体比较好,会有重力,自由落体运动. using UnityEngine; using System.Collections; public class gun ...