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. SharePoint 2013 直接给AD 组赋权限后,AD组里的用户还是登陆不了SharePoint,提示没有权限

    直接给一个all person的AD组赋了个read权限,然后将一个名为“all beijing”的组加到all person组里,但是all beijing组里的人却不能登录sharepoint,提 ...

  2. Autodesk Cloud Accelerator Program 开始报名

    如果你没有注意到这个消息,那你就会错过一个前往旧金山和硅谷工程师一起工作数周的机会. 摘要一下: 时间: 1月10前提交你的提案,3月飞往旧金山 地点: 旧金山. 包住宿哦~ 不过,既然要去美国,既然 ...

  3. 几个有用的JSON工具

    好久没写博客了,这里都要长草了:) 这几天研究PLM360 REST API和Infraworks REST API,一天到晚和JSON打交道,发现这几个小工具非常好用,推荐给大家. 第0个,大名鼎鼎 ...

  4. Projects\Portal_Content\Indexer\CiFiles文件夹下文件占用磁盘空间过大问题。

    C:\Program Files\Microsoft Office Servers\12.0\Data\Office Server\Applications\9765757d-15ee-432c-94 ...

  5. UIView中的坐标转换

    在使用 UITableViewCell 的frame属性获取origin得到的坐标是不变的. 也就是说如果UITableView初始化完毕后,每个cell的坐标是固定的,x不变,y 随index递增的 ...

  6. 代码创建storyboard

    代码创建storyboard方式如下 // 加载storyboard UIStoryboard *storyboard = [UIStoryboard StoryboardWithName:@&quo ...

  7. Android 手机卫士--自定义控件(获取焦点的TextView)

    本文地址:http://www.cnblogs.com/wuyudong/p/5906735.html,转载请注明源地址. 本文将实现标题栏下面的textview中的文字跑马灯的效果,就是将一行文字水 ...

  8. 【iOS】开发常用命令

    环境信息: Mac OS X 10.10.1 删除指定后缀名的文件 进入指定文件夹,输入: find . -name .svn | xargs rm -Rf 查看全部隐藏文件 defaults wri ...

  9. WWDC 2013 Session笔记 - UIKit Dynamics入门

    本文涉及到的WWDC2013 Session有 1.Session 206 Getting Started with UIKit Dynamics 2.Session 221 Advanced Tec ...

  10. IOS contentOffset该如何理解

    contentOffset是哪个点??? 首先从字面理解:内容偏移 我可是查了词典的!!! 对于contentOffset有的时候我们会产生错误理解. 我不想在这里介绍错误的理解避免不必要的混淆. 我 ...