1588: [HNOI2002]营业额统计

Time Limit: 5 Sec  Memory Limit: 162 MB
Submit: 13902  Solved: 5225
[Submit][Status][Discuss]

Description

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

Input

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

Output

输出文件仅有一个正整数,即Sigma(每天最小的波动值) 。结果小于2^31 。

Sample Input

6
5
1
2
5
4
6

Sample Output

12
思路:裸的treap,找前驱后继;
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pi (4*atan(1.0))
#define eps 1e-14
const int N=2e5+,M=4e6+,inf=1e9+,mod=1e9+;
const ll INF=1e18+;
struct is
{
int l,r,v,si,rnd,w;//v 权值 rnd 堆的优先级 w为v的个数
} tree[N];
int n,sz,root,ans,ans1;
void update(int pos)
{
tree[pos].si=tree[tree[pos].l].si+tree[tree[pos].r].si+tree[pos].w;
}
void lturn(int &pos)
{
int t=tree[pos].r;
tree[pos].r=tree[t].l;
tree[t].l=pos;
tree[t].si=tree[pos].si;
update(pos);
pos=t;
}
void rturn(int &pos)
{
int t=tree[pos].l;
tree[pos].l=tree[t].r;
tree[t].r=pos;
tree[t].si=tree[pos].si;
update(pos);
pos=t;
}
void pushin(int &k,int x)
{
if(k==)
{
sz++;
k=sz;
tree[k].w=tree[k].si=;
tree[k].rnd=rand();
tree[k].v=x;
return;
}
tree[k].si++;
if(tree[k].v==x)tree[k].w++;
else if(tree[k].v>x)
{
pushin(tree[k].l,x);
if(tree[tree[k].l].rnd>tree[k].rnd)
rturn(k);
}
else
{
pushin(tree[k].r,x);
if(tree[tree[k].r].rnd>tree[k].rnd)
lturn(k);
}
}
void query(int pos,int x)
{
if(pos==)return;
if(tree[pos].v<=x)
{
ans=tree[pos].v;
query(tree[pos].r,x);
}
else query(tree[pos].l,x);
}
void query1(int pos,int x)
{
if(pos==)return;
if(tree[pos].v>x)
{
ans1=tree[pos].v;
query1(tree[pos].l,x);
}
else
query1(tree[pos].r,x);
}
int a[N];
int main()
{
while(~scanf("%d",&n))
{
sz=root=;
memset(tree,,sizeof(tree));
for(int i=; i<=n; i++)
scanf("%d",&a[i]);
int sum=a[];
pushin(root,a[]);
for(int i=;i<=n;i++)
{
ans1=*inf;
ans=*inf;
query(root,a[i]);
query1(root,a[i]);
if(ans1==*inf)
sum+=abs(a[i]-ans);
else if(ans==*inf)
sum+=abs(a[i]-ans1);
else
sum+=min(abs(a[i]-ans1),abs(a[i]-ans));
pushin(root,a[i]);
}
printf("%d\n",sum);
} return ;
}

bzoj 1588: [HNOI2002]营业额统计 treap的更多相关文章

  1. BZOJ 1588: [HNOI2002]营业额统计 双向链表

    BZOJ 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 512 MBSubmit: 9619  Solved: 3287 题目连接 ht ...

  2. BZOJ 1588: [HNOI2002]营业额统计 双向链表 / splay / treap

    1588: [HNOI2002]营业额统计 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger ...

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

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

  4. BZOJ 1588: [HNOI2002]营业额统计

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

  5. 数据结构:(平衡树,链表)BZOJ 1588[HNOI2002]营业额统计

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

  6. Bzoj 1588: [HNOI2002]营业额统计(splay)

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

  7. SET || BZOJ 1588: [HNOI2002]营业额统计 || Luogu P2234 [HNOI2002]营业额统计

    题面:P2234 [HNOI2002]营业额统计 题解:随便写写 注意:cmath中abs函数返回的是一个浮点数,在bzoj上会ce 代码: #include<cstdio> #inclu ...

  8. BZOJ 1588 HNOI2002 营业额统计 裸Treap

    题目大意:...题目描写叙述不全看这里好了 给定一个序列 对于每一个元素我们定义该数的最小波动值为这个数与前面全部数的差中的最小值(第一个数的最小波动值为第一个数本身) 求最小波动值之和 找近期的数仅 ...

  9. bzoj 1588 [HNOI2002] 营业额统计 链表和Splay

    来自HNOI 2002营业额的统计一题,这题以前是用链表水过的,最近看见许多splay的题,赶紧张一下知识. 题目大意就是对于一个序列,输出每个元素与它之前元素的差的最小值的和.先说链表的方法吧. 大 ...

随机推荐

  1. linux用户栈内核栈的设置---进程的创建: fork/execve【转】

    转自:http://blog.csdn.net/u011279649/article/details/18795547 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 应用层怎 ...

  2. Linux 中open系统调用实现原理【转】

    转自:http://blog.chinaunix.net/uid-25968088-id-3426026.html 目录 OPEN系统调用过程 Open在内核里面的入口函数时sys_open Sys_ ...

  3. python读入文件

    举例说明吧,路径一定要带转义符‘\’,下面的例子中,每一行是一个样本的feature >>> myfile=open("D:\\301\\graduate_thesis\\ ...

  4. scp跨主机拷贝工具

     参考:http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html SSH上A机,要将10.1.17.95机/tpdata/shell_ ...

  5. [HTML]js动态修改表格里面的内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/T ...

  6. [vuforia][unity3d]资源链接

    http://bbs.csdn.net/topics/390787189 CSDN论坛中 “Qualcomm Vuforia(AR虚拟现实)开发” 主题资源下载 http://bbs.csdn.net ...

  7. 跟我一起Django - 01 安装和初始化

    跟我一起Django - 01 安装和初始化 python环境 C:\Python27\Lib\site-packages>python --versionPython 2.7.5 安装setu ...

  8. 20150629_Andriod_06_插入_删除_弹出式操作数据

    Fr_06_view_s6 --> activity_f6_insert              --> activity_f7__delete ******************** ...

  9. StringBuild,StringFormat," "+" " 三种方法速度测试

    测试方式: Stopwatch sw = new Stopwatch(); sw.Start(); string tmp = ""; StringBuilder sb = new ...

  10. linux下报错处理经验

    这是训练中文vocab做的句子相似度的程序: /home/xbwang/torch/install/bin/luajit: /home/xbwang/newtextsimilarity/util/Vo ...