洛谷—— P2234 [HNOI2002]营业额统计
https://www.luogu.org/problem/show?pid=2234
题目描述
Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。
Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况:
当最小波动值越大时,就说明营业情况越不稳定。
而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。
第一天的最小波动值为第一天的营业额。
输入输出格式
输入格式:
输入由文件’turnover.in’读入。
第一行为正整数n(n<=32767) ,表示该公司从成立一直到现在的天数,接下来的n行每行有一个整数ai(|ai|<=1000000) ,表示第i天公司的营业额,可能存在负数。
输出格式:

输入输出样例
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
ct,该记l,r还是要记得。。
以权值为下标建一颗线段树.
每次插一个新值, 并查询大于它的最小值和小于它的最大值.
#include <algorithm>
#include <cstdio> using namespace std; const int N(+);
int n,a[N],mark[N]; struct Node
{
int a,mark;
}node[N];
bool cmp(Node c,Node b)
{
return c.a<b.a;
} #define lc (now<<1)
#define rc (now<<1|1)
#define INF 0x7fffffff
struct Tree
{
int l,r,maxx,minn,val;
}tree[N<<];
void Pushup(int now)
{
tree[now].val=tree[lc].val+tree[rc].val;
tree[now].maxx=max(tree[lc].maxx,tree[rc].maxx);
tree[now].minn=min(tree[lc].minn,tree[rc].minn);
}
void Build(int now,int l,int r)
{
tree[now].l=l;
tree[now].r=r;
tree[now].maxx=-;
tree[now].minn=INF-;
if(l==r) return ;
int mid=l+r>>;
Build(lc,l,mid);
Build(rc,mid+,r);
}
void Change(int now,int x)
{
if(tree[now].l==tree[now].r)
{
tree[now].val=;
tree[now].maxx=tree[now].l;
tree[now].minn=tree[now].r;
return ;
}
int mid=tree[now].l+tree[now].r>>;
if(x<=mid) Change(lc,x);
if(x>mid) Change(rc,x);
Pushup(now);
}
int Q_max(int now,int L,int R)
{
if(R<L) return -;
if(tree[now].val==) return -;
if(tree[now].l>=L&&tree[now].r<=R) return tree[now].maxx;
int tmp=-;
int mid=tree[now].l+tree[now].r>>;
if(L<=mid) tmp=max(tmp,Q_max(lc,L,R));
if(R>mid) tmp=max(tmp,Q_max(rc,L,R));
return tmp;
}
int Q_min(int now,int L,int R)
{
if(R<L) return INF-;
if(tree[now].val==) return INF-;
if(tree[now].l>=L&&tree[now].r<=R) return tree[now].minn;
int tmp=INF,mid=tree[now].l+tree[now].r>>;
if(L<=mid) tmp=min(tmp,Q_min(lc,L,R));
if(R>mid) tmp=min(tmp,Q_min(rc,L,R));
return tmp;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&node[i].a);
node[i].mark=i;
}
sort(node+,node+n+,cmp);
int cnt=;
a[]=node[].a;
mark[node[].mark]=cnt;
for(int i=;i<=n;i++)
{
if(node[i-].a!=node[i].a) cnt++;
a[cnt]=node[i].a;
mark[node[i].mark]=cnt;
}
Build(,,cnt);
int ans=a[mark[]];
Change(,mark[]);
for(int i=;i<=n;i++)
{
int tmp=INF,maxx=Q_max(,,mark[i]),minn=Q_min(,mark[i]+,n);
if(maxx!=-) tmp=min(tmp,a[mark[i]]-a[maxx]);
if(minn!=INF-) tmp=min(tmp,a[minn]-a[mark[i]]);
ans+=tmp;
Change(,mark[i]);
}
printf("%d",ans);
return ;
}
洛谷—— P2234 [HNOI2002]营业额统计的更多相关文章
- 洛谷P2234 [HNOI2002] 营业额统计 [splay]
题目传送门 营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天 ...
- [洛谷P2234][HNOI2002] 营业额统计 - Treap
Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额. ...
- 洛谷P2234 [HNOI2002]营业额统计
题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...
- 洛谷 P2234 [HNOI2002]营业额统计
题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...
- 洛谷P2234 [HNOI2002]营业额统计(01Tire树)
题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...
- 洛谷 2234 [HNOI2002]营业额统计——treap(入门)
题目:https://www.luogu.org/problemnew/show/P2234 学习了一下 treap 的写法. 学习材料:https://blog.csdn.net/litble/ar ...
- 洛谷.2234.[HNOI2002]营业额统计(Splay)
题目链接 //模板吧 #include<cstdio> #include<cctype> #include<algorithm> using namespace s ...
- SET || BZOJ 1588: [HNOI2002]营业额统计 || Luogu P2234 [HNOI2002]营业额统计
题面:P2234 [HNOI2002]营业额统计 题解:随便写写 注意:cmath中abs函数返回的是一个浮点数,在bzoj上会ce 代码: #include<cstdio> #inclu ...
- [luogu P2234] [HNOI2002]营业额统计
[luogu P2234] [HNOI2002]营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司 ...
随机推荐
- 【VC++学习笔记五】SDI|MDI的全屏显示
一.Mainframe中添加一个记录是否全屏状态的变量BOOL m_bFullScreen. 二.工具栏添加一个按钮,进行全屏的操作,响应事件函数写在Mainframe中. 三.在响应函数中,添加如下 ...
- 关于idea开发工具常用的快捷键
自动补全缺失的import alt+enter 自动优化import ctrl+alt+o 自动补全返回代码:IDEA的ctrl+alt+v ,eclipse的CTRL+F1 main p ...
- QT就是别人好心帮你做一些枯燥,并且很重复的代码编写工作,让你更好的把精力投入到你界面的逻辑和功能的实现的功能库(否则写了上万行代码了,才写出个BUG一大堆的毛坯)
好了,现在开始记录我学习QT的学习历程 . 本人也不是计算机专业出来的,自学了一点,但还是不好找工作,于是参加了培训,虽然感觉没多学到什么 编程的学习生涯就是不断的看别人的源码,然后自己参考着写写自己 ...
- Can't access RabbitMQ web management interface after fresh install
http://stackoverflow.com/questions/22850546/cant-access-rabbitmq-web-management-interface-after-fres ...
- 【bzoj4864】神秘物质
Description 给出一个长度为n的序列,第i个数为ai,进行以下四种操作: merge x e:将当前第x个数和第x+1个数合并,得到一个新的数e: insert x e:在当前第x个数和第x ...
- 18/9/22NOIP模拟考
18/9/22NOIP模拟考 其实本来是有多组数据的,出题人忘记在题面上加了 斜眼笑 期望得分:100:实际得分:100 由于种种原因,拿到题的时候已经过去了0.5h+... 然后因为这道题数据范 ...
- Mysql学习总结(18)——Mysql主从架构的复制原理及配置详解
一.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...
- 【Material Design视觉设计语言】应用样式设计
作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...
- oracle 10g standby database 实时应用 redo 数据
-------physical standby database: real-time apply 须要配置 standby redo log: 启用实时应用, 日志应用服务会直接应用接收的redo ...
- scrapy爬取知乎某个问题下的所有图片
前言: 1.仅仅是想下载图片,别人上传的图片也是没有版权的,下载来可以自己欣赏做手机背景但不商用 2.由于爬虫周期的问题,这个代码写于2019.02.13 1.关于知乎爬虫 网上能访问到的理论上都能爬 ...