bzoj1588 [HNOI2002]营业额统计
来源:互联网 发布:多组数据相关性分析 编辑:程序博客网 时间:2024/05/20 22:30
Description
营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况: 该天的最小波动值 当最小波动值越大时,就说明营业情况越不稳定。 而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。 第一天的最小波动值为第一天的营业额。 输入输出要求
Input
第一行为正整数 ,表示该公司从成立一直到现在的天数,接下来的n行每行有一个整数(有可能有负数) ,表示第i
天公司的营业额。
天数n<=32767,
每天的营业额ai <= 1,000,000。
最后结果T<=2^31
Output
输出文件仅有一个正整数,即Sigma(每天最小的波动值) 。结果小于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
该题数据bug已修复.—-2016.5.15
Source
题解
数据结构水题,用来练范浩强treap了(orz ycz大神)
代码
#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>using namespace std;typedef pair<int,int> pii;const int sor=1234567890struct treap{ int tot,root,son[3000009][2],size[3000009],val[3000009]; int mem() { memset(val,255,sizeof(val)); return 0; } int updata(int a) { return size[a]=size[son[a][0]]+size[son[a][1]]+1; } int random(int limit) { return rand()%limit+1; } int merge(int a,int b) { if ((a==0)||(b==0)) { return a+b; } if (random(size[a]+size[b])<=size[a]) { son[a][1]=merge(son[a][1],b); updata(a); return a; } else { son[b][0]=merge(a,son[b][0]); updata(b); return b; } } pii split(int a,int k) { if (size[a]==k) { return make_pair(a,0); } if (k==0) { return make_pair(0,a); } pii t; if (size[son[a][0]]>=k) { t=split(son[a][0],k); son[a][0]=t.second; updata(a); return make_pair(t.first,a); } else { t=split(son[a][1],k-size[son[a][0]]-1); son[a][1]=t.first; updata(a); return make_pair(a,t.second); } } int rank(int v) { int i=root,ans=0; while (i!=0) { if (val[i]>=v) { i=son[i][0]; } else { ans+=size[son[i][0]]+1; i=son[i][1]; } } return ans+1; } int id(int v,int k) { if (k==0) { return 0; } if (size[son[v][0]]>=k) { return id(son[v][0],k); } if (size[son[v][0]]+1==k) { return v; } return id(son[v][1],k-size[son[v][0]]-1); } int getval(int v) { return val[id(root,v)]; } int pre(int v) { return val[id(root,rank(v)-1)]; } int next(int v) { return val[id(root,rank(v)+1)]; } int insert(int v) { tot++; son[tot][0]=son[tot][1]=0; val[tot]=v; size[tot]=1; pii t=split(root,rank(v)-1); root=merge(merge(t.first,tot),t.second); return root; } int adelete(int v) { int x; x=rank(v); pii s,t; s=split(root,x-1); t=split(s.second,1); root=merge(s.first,t.second); return root; }};treap tree;int n,x,pr,ne,ans;int main(){ tree.mem(); srand(sor); scanf("%d",&n); while (n--) { scanf("%d",&x); tree.insert(x); pr=tree.pre(x); ne=tree.next(x); if (pr==-1&&ne==-1) { ans+=x; continue; } if (ne==-1) { ans+=abs(pr-x); continue; } if (pr==-1) { ans+=abs(ne-x); continue; } ans+=min(abs(ne-x),abs(pr-x)); } printf("%d",ans); return 0;}
阅读全文
0 0
- hnoi2002 bzoj1588 营业额统计
- [BZOJ1588][HNOI2002]营业额统计
- bzoj1588【HNOI2002】营业额统计
- BZOJ1588: [HNOI2002]营业额统计
- bzoj1588[HNOI2002]营业额统计
- 【bzoj1588】[HNOI2002]营业额统计
- 【BZOJ1588】【HNOI2002】营业额统计
- [bzoj1588][HNOI2002]营业额统计
- bzoj1588: [HNOI2002]营业额统计
- BZOJ1588: [HNOI2002]营业额统计
- bzoj1588: [HNOI2002]营业额统计
- BZOJ1588[HNOI2002]营业额统计
- bzoj1588 [HNOI2002]营业额统计
- bzoj1588 [HNOI2002]营业额统计
- BZOJ1588: [HNOI2002]营业额统计
- bzoj1588: [HNOI2002]营业额统计
- 【BZOJ1588】【HNOI2002】营业额统计 splay
- bzoj1588 [HNOI2002]营业额统计 (Splay)
- 网络请求框架(一)-----okHttp的使用
- PTX ISA 之 Control Flow Instructions
- virtualbox中redhat5扩展根分区
- Java for Web学习笔记(七十):Service和Repository(5)回调处理Consumer
- Linux I/O复用 —— epoll部分源码剖析
- bzoj1588 [HNOI2002]营业额统计
- C语言问题:源于www.dotcpp.com问题1002
- 使用Struts2进行上传下载
- 常见的UI框架
- Android RxJava Retrofit上传图片
- mysql 主从复制
- 多线程同步(线程安全,同步方法)
- UVA514 铁轨问题
- 面向对象编程之方法的封装性