描述 Description

营业额统计 

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

Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况: 

该天的最小波动值=min{|该天以前某一天的营业额-该天的营业额|} 

当最小波动值越大时,就说明营业情况越不稳定。 

而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。 

第一天的最小波动值为第一天的营业额。 

? 输入输出要求 

输入格式 InputFormat

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

输出格式 OutputFormat

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

样例输入 SampleInput

6
5
1
2
5
4
6

样例输出 SampleOutput

12

数据范围和注释 Hint

结果说明:5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12

bzoj卡了……不开心

平衡树裸题。写了个treap的

#include<cstdio>
#include<ctime>
#include<cstdlib>
#define maxnum 1000001
#define inf 1000000000
struct node{
int l,r,num,rando;
}tree[maxnum];
int treesize,root,n,ans,t1,t2;
int min(int a,int b)
{return a<b?a:b;}
void right_rotate(int &work)
{
int t = tree[work].l;
tree[work].l = tree[t].r;
tree[t].r = work;
work = t;
}
void left_rotate(int &work)
{
int t = tree[work].r;
tree[work].r = tree[t].l;
tree[t].l = work;
work = t;
}
void insert(int &now,int x)
{
if (now == 0)
{
now = ++treesize;
tree[now].rando = rand()%maxnum;
tree[now].num = x;
return;
}
if (x < tree[now].num)
{
insert(tree[now].l,x);
if (tree[tree[now].l].rando < tree[now].rando) right_rotate(now);
}
else
{
insert(tree[now].r,x);
if (tree[tree[now].r].rando < tree[now].rando) left_rotate(now);
}
}
void ask_before(int now,int x)
{
if(!now)return;
if(x>=tree[now].num){t1=tree[now].num;ask_before(tree[now].r,x);}
else ask_before(tree[now].l,x);
}
void ask_after(int now,int x)
{
if(!now)return;
if(x<=tree[now].num){t2=tree[now].num;ask_after(tree[now].l,x);}
else ask_after(tree[now].r,x);
}
int main()
{
srand(time(0));
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
int x;
if(scanf("%d",&x)==EOF)x=0;
t1=-inf;t2=inf;
ask_before(root,x);
ask_after(root,x);
if(i!=1)ans+=min(x-t1,t2-x);
else ans+=x;
insert(root,x);
}
printf("%d",ans);
return 0;
}

tyvj1185营业额统计的更多相关文章

  1. BZOJ1588: [HNOI2002]营业额统计[BST]

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

  2. 【Treap】bzoj1588-HNOI2002营业额统计

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

  3. 营业额统计(SBT)

    营业额统计(SBT) #include<cstdio> #include<cstring> #include<string> #include<cstdlib ...

  4. NOI 2002 营业额统计 (splay or fhq treap)

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

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

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

  6. 营业额统计(bzoj1588)

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

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

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

  8. Splay树-Codevs 1296 营业额统计

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

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

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

随机推荐

  1. 一条sql

    包含全部:SELECT u.id,u.user_name,usa.fixed_amount,d.uloadtype,d.min_loan_money FROM fanwe_user_autobid u ...

  2. C语言 · 数字三角形 · 算法训练

    问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ...

  3. Xcode开启gcc/g++

    Apple announced Xcode 4.3 for OSX Lion and 4.4 for OSX Mountain Lion last week. The major difference ...

  4. 路径问题以及cookie详解

    1.路径问题: 注意 .代表执行程序的文件夹路径,在tomcat中也就是bin目录,所以要用this.getServletContext().getRealPath("/WEB-INF/cl ...

  5. Flex中的折线图

    1.问题背景 在Flex中,制作一个折线图.而且给折线图的横轴和纵轴进行样式设置,详细实现过程例如以下: 2.实现实例 (1)设置横轴样式和数据绑定 <mx:horizontalAxis> ...

  6. 局域网指定 IP 地址后无法上网的问题

    子网掩码.默认网关.DNS 与局域网设置有关,建议指定前先 运行 cmd -> ipconfig /all 查看一下自动获取的信息. 另外留意指定IP 后需打开高级设置 -> WINS,勾 ...

  7. void*指针

    C++提供了一种特殊的指针类型void*,它可以保存任何类型对象的地址: void*表明该指针与一地址值相关,但不清楚存储在此地址上的对象的类型. void*指针只支持几种有限的操作: 1)与另一个指 ...

  8. (转)C# DateTime格式化大全

    //c datetime 格式化 DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21:25 Label2 ...

  9. JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法

    1. JSON.parse(jsonString): 在一个字符串中解析出JSON对象 var str = '[{"href":"baidu.com",&quo ...

  10. js 获取mac地址

    js 获取mac地址 function MacInfo(){ var locator =new ActiveXObject ("WbemScripting.SWbemLocator" ...