Description

营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况: 该天的最小波动值 当最小波动值越大时,就说明营业情况越不稳定。 而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。 第一天的最小波动值为第一天的营业额。  输入输出要求

Input

第一行为正整数 ,表示该公司从成立一直到现在的天数,接下来的n行每行有一个整数(有可能有负数) ,表示第i天公司的营业额。

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

#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)的更多相关文章

  1. 【数据结构】平衡树splay和fhq—treap

    1.BST二叉搜索树 顾名思义,它是一棵二叉树. 它满足一个性质:每一个节点的权值大于它的左儿子,小于它的右儿子. 当然不只上面那两种树的结构. 那么根据性质,可以得到该节点左子树里的所有值都比它小, ...

  2. 【BZOJ-1588】营业额统计 Splay

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 12485  Solved: 4508[Submit][Sta ...

  3. BZOJ1588 HNOI2002 营业额统计 [Splay入门题]

    [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4128  Solved: 1305 Description 营业额统计 ...

  4. NOIP 营业额统计 splay tree 纯模板

    2924: 营业额统计 Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: 389       ...

  5. [HNOI 2002]营业额统计

    Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...

  6. 2018.07.06 BZOJ 1588: HNOI2002营业额统计(非旋treap)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上 ...

  7. 1588: [HNOI2002]营业额统计 (splay tree)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 5783  Solved: 1859[Submit][Stat ...

  8. 洛谷P2234 [HNOI2002] 营业额统计 [splay]

    题目传送门 营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天 ...

  9. [HNOI2002]营业额统计 Splay tree入门题

    题目连接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec   ...

随机推荐

  1. VS 2015打开项目闪退,新建项目提示未将对象引用到实例

    因为开发需要,要把开发工具换成visual studio2015,装完之后会有警告“js”安装的问题,打开VS也没有问题, 但是一打开项目就闪退,新建项目也不行,查看应用程序日志,报错提示如下: .N ...

  2. 通过settings.db自定义Android系统默认设置

    Android的系统设置数据存放在/data/data/com.android.providers.settings/databases/settings.db 中 数据库结构如下: 数据库中的默认数 ...

  3. 【VLC-Android】vlc-android简例

    前言 继续折腾vlc,做这个例子并不顺利,卡在只有声音没有图像这个问题好久,网上的例子有些API已经对不上,继续分享,,, 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cn ...

  4. GCD中的dispatch_group函数的详解

    <一>引入dispatch_group函数的目的 在追加到dispatch_Queue中的多个处理全部结束后想要执行结束的处理,这种需求经常会在我们的程序中出现 (第一种情况)只使用一个S ...

  5. ios git 终端提交

    git status    //检查提交状态 git status On branch master  //检查分支 git branch   //查看分支 git add *   //添加所有本地更 ...

  6. 分页查询的SQL语句

    select * from(select row_number() over (ORDER BY Id DESC) cyqrownum,t.* from [Table_TY_Member] t ) v ...

  7. 世道变了 – 你愿意成为微软认证Linux工程师吗?

     随笔世道变了 – 你愿意成为微软认证Linux工程师吗? 世道变了 – 你愿意成为微软认证Linux工程师吗?  leixu十二月 14, 2015随笔 2015年12月9日,微软发布了全新的MCS ...

  8. Java基础知识学习(一)

    部门接了新项目,后台使用Java框架play framework,前端是html,前后台通过rest交互,能够支持多端的互联网架构. 因为之前没有Java基础,前端使用的也很少,决定深入学习一下Jav ...

  9. 大家一起和snailren学java-(13)字符串

    “好久没有写这个系列了.其实也有在看,不过觉得一些很基本的都写上来没意思.现在打算的是将整本书看完后,最后整合为一篇blog,筛选出一些平时没有注意到的或者更深入的理解” 在写程序中,字符串Strin ...

  10. EventBus使用详解(一)

    一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...