洛谷—— 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拿出了公司 ...
随机推荐
- mysql 5.7 双主+主从配置
mysql5.7安装及赋权 wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm rpm -ivh mysql57 ...
- javaweb:判断当前请求是否为移动设备访问
http://blog.csdn.net/educast/article/details/71157932
- cogs 32. [POI1999] 位图
32. [POI1999] 位图 ★ 输入文件:bit.in 输出文件:bit.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述 ] 给定一个 n*m 的矩形位图, ...
- android 4.4最新官方源代码下载
国内网络,日夜不休花了一个多月才下载成功android标准源代码,有些开发同人须要.已上传到网盘,分享给大家 微云地址: http://url.cn/PkkSzC 百度云盘地址(更新) http:// ...
- 深度学习2015年文章整理(CVPR2015)
国内外从事计算机视觉和图像处理相关领域的著名学者都以在三大顶级会议(ICCV.CVPR和ECCV)上发表论文为荣,其影响力远胜于一般SCI期刊论文.这三大顶级学术会议论文也引领着未来的研究趋势.CVP ...
- Linux下截图技巧
在需要Linux显示图片的场合,最普通的方法,会考虑用数码相,或是用Vmware,或VPc来抓拍,这样以来会比较麻烦,Linux也自带了些工具例如Gimp,ksnapshot这里我介绍一 ...
- BZOJ 高精度开根 JAVA代码
晓华所在的工作组正在编写一套高精度科学计算的软件,一些简单的部分如高精度加减法.乘除法早已写完了,现在就剩下晓华所负责的部分:实数的高精度开m次根.因为一个有理数开根之后可能得到一个无理数,所以这项工 ...
- 【Hello 2018 A】 Modular Exponentiation
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 当a<b的时候 a%b==a 显然2^n增长很快的. 当2^n>=1e8的时候,直接输出m就可以了 [代码] #incl ...
- HDU 2191 悼念512汶川大地震
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- WPF通用框架 数据库结构
前言 由於技術轉型, 目前大部分工作都是WPF為主, 但是趨於如今想在網絡上找一套能夠滿意的WPF權限管理框架太難, 因為WinForm那時候是有一套改寫過的權限框架, 所以數據庫設計這塊已經有了一個 ...