p2234&bzoj1588 营业额统计
题目
营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况: 该天的最小波动值 当最小波动值越大时,就说明营业情况越不稳定。 而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。 第一天的最小波动值为第一天的营业额。
Input
Output
输出文件仅有一个正整数,即Sigma(每天最小的波动值) 。结果小于2^31 。
分析
按天数顺序将每天权值依次加入线段树中权值所在位置,每一次波折即为在此点之前的最大值和此点的差与在此点之后的最小值与此点的差的最小值。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
const int inf=1e9+;
map<int,int>id;
map<int,int>back;
int d[][],a[],b[];
inline int read(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=(x<<)+(x<<)+(s-'');s=getchar();}
return f*x;
}
inline void add(int le,int ri,int k,int wh){
d[][wh]=max(d[][wh],k),d[][wh]=min(d[][wh],k);
if(le==ri)return;
int mid=(le+ri)>>;
if(mid>=k)add(le,mid,k,wh*);
else add(mid+,ri,k,wh*+);
}
inline int q(int le,int ri,int x,int y,int wh,int mm){
if(mm==){
if(le>=x&&ri<=y)return d[][wh];
int ans=,mid=(le+ri)>>;
if(mid>=x)ans=max(ans,q(le,mid,x,y,wh*,mm));
if(mid<y)ans=max(ans,q(mid+,ri,x,y,wh*+,mm));
return ans;
}else {
if(le>=x&&ri<=y)return d[][wh];
int ans=inf,mid=(le+ri)>>;
if(mid>=x)ans=min(ans,q(le,mid,x,y,wh*,mm));
if(mid<y)ans=min(ans,q(mid+,ri,x,y,wh*+,mm));
return ans;
}
}
int main()
{ int n,m,i,j,k,ans=,sum=;
for(i=;i<=;i++)d[][i]=inf;
n=read();
for(i=;i<=n;i++){
a[i]=read();
b[i]=a[i];
}
sort(b+,b+n+);
for(i=;i<=n;i++)
if(!id[b[i]]){
id[b[i]]=++sum;
back[sum]=b[i];
}
ans+=a[];
add(,sum,id[a[]],);
for(i=;i<=n;i++){
int tot=inf,x=q(,sum,,id[a[i]],,),y=q(,sum,id[a[i]],sum,,);
if(x>)tot=min(tot,abs(back[x]-a[i]));
if(y<inf)tot=min(tot,abs(back[y]-a[i]));
ans+=tot;
add(,sum,id[a[i]],);
}
printf("%d\n",ans);
return ;
}
p2234&bzoj1588 营业额统计的更多相关文章
- SET || BZOJ 1588: [HNOI2002]营业额统计 || Luogu P2234 [HNOI2002]营业额统计
题面:P2234 [HNOI2002]营业额统计 题解:随便写写 注意:cmath中abs函数返回的是一个浮点数,在bzoj上会ce 代码: #include<cstdio> #inclu ...
- [luogu P2234] [HNOI2002]营业额统计
[luogu P2234] [HNOI2002]营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司 ...
- 洛谷P2234 [HNOI2002] 营业额统计 [splay]
题目传送门 营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天 ...
- BZOJ1588 营业额统计 (Splay)
营业额统计 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额. ...
- [洛谷P2234][HNOI2002] 营业额统计 - Treap
Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额. ...
- 洛谷P2234 [HNOI2002]营业额统计
题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...
- P2234 [HNOI2002]营业额统计
题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...
- 洛谷 P2234 [HNOI2002]营业额统计
题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...
- 洛谷P2234 [HNOI2002]营业额统计(01Tire树)
题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...
随机推荐
- java学习笔记 --- IO(3)
1.FileReader:读取字符流,默认GBK public class CharStreamDemo { public static void main(String[] args) throws ...
- BEC listen and translation exercise 7
Maybe I ought to subscribe to the Engineering Quarterly.也许我应该订阅<工程学季刊>. The performance is sai ...
- Mac安装SSHFS挂载远程服务器上的文件夹到本地
一.安装SSHFUS sshfs依赖于fuse,所以需要先安装fuse,这两个软件都可以在https://osxfuse.github.io/下载到. 注意安装顺序. 二.挂载文件夹到本地 输入一下命 ...
- itext生成pdf(附带页眉,页脚,页码)
package cn.picclife.mwx.salesupport.marketactivity.util; import java.io.File; import java.io.FileOut ...
- Oracle hash分区的秘密
转自:http://www.hellodb.net/2009/12/hash_partition.html 在面试时经常会问一个问题,请列举出hash在数据库内部的应用,hash的原理虽然简单,但是它 ...
- EF各版本增删查改及执行Sql语句
自从我开始使用Visual Studio 也已经经历了好几个版本了,而且这中间EF等框架的改变也算是比较多的.本篇文章记录下各个版本EF执行Sql语句和直接进行增删查改操作的区别,方便自己随时切换版本 ...
- 使用virtualenv搭建python3的环境
转:http://blog.csdn.net/liuchunming033/article/details/46008301 转:http://www.jb51.net/article/85527.h ...
- C++对C语言的拓展(3)—— 默认参数和占位参数
通常情况下,函数在调用时,形参从实参那里取得值.对于多次调用同一函数同一 实参时,C++给出了更简单的处理办法.给形参以默认值,这样就不用从实参那里取值了. 1.单个默认参数 若填写参数,使用你填写的 ...
- JSON格式化以及转化为Entity事项
其实JSON在eclipse里面就可以自动化,不需要再联网去进行格式化: 然后通过http://www.bejson.com/java2pojo/ 即可实现json转java 但是要注意:从str ...
- git revert reset
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit. git reset 是把HEAD向后移动了一下,而git revert是HEAD ...