NOI 2002 营业额统计 (splay or fhq treap)
Description
营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况: 该天的最小波动值 当最小波动值越大时,就说明营业情况越不稳定。 而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。 第一天的最小波动值为第一天的营业额。 输入输出要求
Input
第一行为正整数 ,表示该公司从成立一直到现在的天数,接下来的n行每行有一个整数(有可能有负数) ,表示第i天公司的营业额。
Output
输出文件仅有一个正整数,即Sigma(每天最小的波动值) 。结果小于2^31 。
Sample Input
5
1
2
5
4
6
Sample Output
HINT
结果说明:5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12
#include<cstdio>
#include<iostream>
#define inf 0x3f3f3f3f
using namespace std;
int n,root,sz,key[],pre[],ch[][];
void newnode(int &r,int f,int k)
{
r=++sz;
pre[r]=f;
key[r]=k;
ch[r][]=ch[r][]=;
}
void rotate(int x,int kind)
{
int y=pre[x];
ch[y][!kind]=ch[x][kind];
pre[ch[x][kind]]=y;
if(pre[y])ch[pre[y]][ch[pre[y]][]==y]=x;
pre[x]=pre[y];
ch[x][kind]=y;
pre[y]=x;
}
void splay(int r,int goal)
{
while(pre[r]!=goal){
if(pre[pre[r]]==goal)rotate(r,ch[pre[r]][]==r);
else{
int y=pre[r];
int kind=ch[pre[y]][]==y;
if(ch[y][kind]==r){
rotate(r,!kind);
rotate(r,kind);}
else{
rotate(y,kind);
rotate(r,kind);}}}
if(!goal)root=r;
}
void insert(int k)
{
int r=root;
if(!r){
newnode(root,,k);
return;}
while(ch[r][key[r]<k])r=ch[r][key[r]<k];
newnode(ch[r][k>key[r]],r,k);
splay(ch[r][k>key[r]],);
}
int get_next(int x)
{
int tmp=ch[x][];
if(!tmp)return inf;
while(ch[tmp][])tmp=ch[tmp][];
return key[tmp]-key[x];
}
int get_pre(int x)
{
int tmp=ch[x][];
if(!tmp)return inf;
while(ch[tmp][])tmp=ch[tmp][];
return key[x]-key[tmp];
}
int main()
{
scanf("%d",&n);
int num,ans=;
for(int i=;i<=n;i++){
scanf("%d",&num);
insert(num);
if(i==)ans+=num;
else{
int a=get_next(root),b=get_pre(root);
ans+=min(a,b);}
}
printf("%d\n",ans);
return ;
}
更新fhq treap模板哦~~~
#include<cstdio>
#include<cstdlib>
#include<climits>
#include<iostream>
#define INF INT_MAX/3*2
using namespace std;
inline int Rin(){
int x=,c=getchar(),f=;
for(;c<||c>;c=getchar())
if(!(c^))f=-;
for(;c>&&c<;c=getchar())
x=(x<<)+(x<<)+c-;
return x*f;
}
struct Seg{
struct node{
node*ch[];
int v,s,r,size;
node(int v,node*_):v(v){s=size=;r=rand();ch[]=ch[]=_;}
void pu(){size=ch[]->size+ch[]->size+s;}
}*rt,*bf;
Seg(){
bf=new node(,);bf->r=INF;
bf->s=bf->size=;
bf->ch[]=bf->ch[]=bf;
rt=bf;
}
void rot(node*&o,int d){
node*k=o->ch[d];o->ch[d]=k->ch[d^];k->ch[d^]=o;
o->pu();k->pu();o=k;
}
void ins(node*&o,int x){
if(o==bf){o=new node(x,bf);return;}
if(o->v==x){o->s++;o->size++;return;}
ins(o->ch[x>o->v],x);
if(o->ch[x>o->v]->r<o->r)rot(o,x>o->v);
else o->pu();
}
int prev(node*o,int x){
if(o==bf)return -INF;
if(o->v==x&&o->s>)return o->v;
if(x<=o->v)return prev(o->ch[],x);
return max(o->v,prev(o->ch[],x));
}
int nxt(node*o,int x){
if(o==bf)return INF;
if(o->v==x&&o->s>)return o->v;
if(x>=o->v)return nxt(o->ch[],x);
return min(o->v,nxt(o->ch[],x));
}
}T;
int n,x,nxt,prev,ans;
int main(){
srand('z'+'t'+'k'+'s'+'q');
n=Rin();
for(int i=;i<=n;i++){
x=Rin();T.ins(T.rt,x);
if(!(i^)){ans=x;continue;}
prev=x-T.prev(T.rt,x),nxt=T.nxt(T.rt,x)-x;
ans+=min(prev,nxt);
}
printf("%d\n",ans);
return ;
}
NOI 2002 营业额统计 (splay or fhq treap)的更多相关文章
- 【数据结构】平衡树splay和fhq—treap
1.BST二叉搜索树 顾名思义,它是一棵二叉树. 它满足一个性质:每一个节点的权值大于它的左儿子,小于它的右儿子. 当然不只上面那两种树的结构. 那么根据性质,可以得到该节点左子树里的所有值都比它小, ...
- 【BZOJ-1588】营业额统计 Splay
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 12485 Solved: 4508[Submit][Sta ...
- BZOJ1588 HNOI2002 营业额统计 [Splay入门题]
[HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 4128 Solved: 1305 Description 营业额统计 ...
- NOIP 营业额统计 splay tree 纯模板
2924: 营业额统计 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 389 ...
- [HNOI 2002]营业额统计
Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...
- 2018.07.06 BZOJ 1588: HNOI2002营业额统计(非旋treap)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上 ...
- 1588: [HNOI2002]营业额统计 (splay tree)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 5783 Solved: 1859[Submit][Stat ...
- 洛谷P2234 [HNOI2002] 营业额统计 [splay]
题目传送门 营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天 ...
- [HNOI2002]营业额统计 Splay tree入门题
题目连接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec ...
随机推荐
- Autodesk 360 Mobile不能显示图片?
在6月21号的DevLab上,有一位朋友说Autodesk 360 Mobile在iPad上不能显示JPG图片预览.我当时没带iPad,不能测试.后天回家在Autodesk 360 Mobile 3. ...
- Android Handler机制(四)---Handler源码解析
Handler的主要用途有两个:(1).在将来的某个时刻执行消息或一个runnable,(2)把消息发送到消息队列. 主要依靠post(Runnable).postAtTime(Runnable, l ...
- Quartz2D复习(二) --- 手势解锁
这次支付宝手机客户端升级,把手势解锁那个功能去掉了,引起很多人的抱怨,觉得少了手势解锁的保护,个人信息容易泄漏了... 那么手势解锁功能是怎么是实现的呢,这里使用Quart2D来简单模拟一下, 先看下 ...
- 一起来学习Android自定义控件1
概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...
- UITableView与UISearchController搜索及上拉加载,下拉刷新
#import "ViewController.h" #import "TuanGouModel.h" #import "TuanGouTableVi ...
- Eclipse中Maven+Spring3.2.17+SpringMVC HelloWorld
遇到的问题 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path ...
- iOS KVO概述
iOS KVO概述 面试中经常会被问到:什么是KVO?这个问题既然出现概率这么大,那么我们就来详细讲一讲到底什么是KVO.下次再有面试官问你的时候,你就可以娓娓道来,以彰显高逼格 概述 问:什么是KV ...
- win环境变量立即生效
执行 set PATH=C: 新打开的cmd窗口就立即生效了.
- get和post的区别与乱码问题解决
★ get和post的区别: 1.get请求通过url地址发送请求参数,可以在地址栏上直接显示 2.post请求通过请求体发送请求参数,不会再地址栏上显示 3.get在地址栏显 ...
- 软件开发与UML的关系
今天,我们上<统一建模语言UML>.课上老师给我们讲解了软件开发与UML之间的关系:UML常用于建立软件系统的模型,适用于系统开发的不同阶段.UML的应用贯穿于系统开发的不同阶段.1.需求 ...