营业额统计 2011-12-20
2016-03-02 20:04
369 查看
营业额统计
(turnover.exe)
Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。
Tiger 拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一 定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波 动值来衡量这种情况:
该天的最小波动值
当最小波动值越大时,就说明营业情况越不稳定。
而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。
第一天的最小波动值为第一天的营业额。
l 输入输出要求
输入由文件’turnover.in’读入。
第一行为正整数,表示该公司从成立一直到现在的天数,接下来的n行每行有一个正整数,表示第i天公司的营业额。
输出到文件’turnover.out’。
输出文件仅有一个正整数,即。结果小于。
l 输入输出样例
Turnover.in
Turnover.out
6
5
1
2
5
4
6
12
结果说明:5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12
————————————————————————
平衡树优化。
————————————————————————
(turnover.exe)
Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。
Tiger 拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一 定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波 动值来衡量这种情况:
该天的最小波动值
当最小波动值越大时,就说明营业情况越不稳定。
而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。
第一天的最小波动值为第一天的营业额。
l 输入输出要求
输入由文件’turnover.in’读入。
第一行为正整数,表示该公司从成立一直到现在的天数,接下来的n行每行有一个正整数,表示第i天公司的营业额。
输出到文件’turnover.out’。
输出文件仅有一个正整数,即。结果小于。
l 输入输出样例
Turnover.in
Turnover.out
6
5
1
2
5
4
6
12
结果说明:5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12
————————————————————————
平衡树优化。
————————————————————————
Program Stone; var i,j,k,n,root,qu,ji:longint; a:array[0..50000]of longint; t,lc,rc,f:array[0..50000]of longint; ans:int64; procedure rightturn(x:longint); //右旋 var i,j:longint; begin i:=f[x]; if lc[f[i]]=i then lc[f[i]]:=x else rc[f[i]]:=x; f[x]:=f[i]; lc[i]:=rc[x]; f[lc[i]]:=i; rc[x]:=i; f[i]:=x; end; procedure leftturn(x:longint); //左旋 var i:longint; begin i:=f[x]; if lc[f[i]]=i then lc[f[i]]:=x else rc[f[i]]:=x; f[x]:=f[i]; rc[i]:=lc[x]; f[rc[i]]:=i; lc[x]:=i; f[i]:=x; end; procedure findleft(x:longint); //寻找前驱,即寻找根节点的左子树中最大的节点 begin if rc[x]=0 then qu:=x else findleft(rc[x]); end; procedure findright(x:longint); //寻找后继,即寻找根节点的右子树中的最小节点 begin if lc[x]=0 then ji:=x else findright(lc[x]); end; procedure add(x,o:longint); //在二叉树中添加一个节点 var i,j,k:longint; begin if a[o]>=a[x] then begin if rc[x]=0 then begin rc[x]:=o;f[o]:=x;end //判断是否可以插入节点。 else add(rc[x],o); end else begin if lc[x]=0 then begin lc[x]:=o;f[o]:=x;end else add(lc[x],o); end; end; procedure promote(x:longint); //splay旋转。共六种旋转方式 var i,j,k:longint; begin k:=f[x]; if x=lc[k] then begin if f[k]=0 then rightturn(x) else if lc[f[k]]=k then begin rightturn(k); rightturn(x); end else begin rightturn(x); leftturn(x); end; end else begin if f[k]=0 then leftturn(x) else if rc[f[k]]=k then begin leftturn(k); leftturn(x); end else begin leftturn(x); rightturn(x); end; end; end; function min(a,b:longint):longint; begin if a<b then min:=a else min:=b; end; Begin assign(input,'turnover.in');assign(output,'turnover.out'); reset(input);rewrite(output); readln(n); readln(a[1]); ans:=a[1];root:=1; for i:=2 to n do begin readln(a[i]); add(root,i); while f[i]<>0 do promote(i); //将i节点旋转到根 root:=i; findleft(lc[i]); findright(rc[i]); inc(ans,min(abs(a[qu]-a[i]),abs(a[ji]-a[i]))); end; writeln(ans); close(input);close(output); end.
相关文章推荐
- monit监控tomcat service
- VS2013中安装配置和使用Boost库
- 2.2 Cache的组成结构
- iOS 简单常用动画animation
- WIFI开启扫描热点
- linux中vi编辑器的使用
- 变态跳台阶
- bzoj1798: [Ahoi2009]Seq 维护序列seq 2011-12-20
- java 多线程join
- git学习--git命令大全_
- OpenCL函数-1
- Redis内存回收:LRU算法
- 面向对象概述
- Kafka的可靠性问题
- 母牛繁殖问题:一头母牛,每年年初生一头小母牛,每头小母牛从第四个年头起,每年年初也要生一头小母牛,问:第20个年头后共有多少只牛?
- 2015年终总结
- python脚本:计算某个目录下Code行数
- java 多线程sleep
- HDU1033 Edge(读懂题目是关键呀,两种方式实现!)
- MySQL SHOW INDEX语法的实际应用