[BZOJ 1588] [HNOI 2002] 营业额统计

1588: [HNOI2002]营业额统计

Time Limit: 5 Sec
Memory Limit: 162 MB

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


此题数据有问题,详见讨论版http://www.lydsy.com/JudgeOnline/wttl/wttl.php?pid=1588

【题解】

用平衡树来维护插入等操作即可。

平衡树第二题 AC

事实证明,zig,zag分开来写会更快=-=

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=40010;
 4 int fa[N],ch[N][2],root,k[N],ind=1;
 5 void zig(int x) {  
 6     int y=fa[x],z=fa[y];  
 7     fa[y]=x;
 8     fa[x]=z;  
 9     ch[y][0]=ch[x][1],fa[ch[x][1]]=y,ch[x][1]=y;  
10     if (y==ch[z][0]) ch[z][0]=x;  
11     else ch[z][1]=x;  
12     //size[y]=size[ch[y][0]]+size[ch[y][1]]+1; 
13 }  
14 void zag(int x) {  
15     int y=fa[x],z=fa[y];  
16     fa[y]=x,fa[x]=z; 
17     ch[y][1]=ch[x][0],fa[ch[x][0]]=y,ch[x][0]=y;  
18     if (y==ch[z][0]) ch[z][0]=x;  
19     else ch[z][1]=x;  
20     //size[y]=size[ch[y][0]]+size[ch[y][1]]+1; 
21 }  
22 void splay(int x,int s) {
23     while (fa[x]!=s) {  
24         int y=fa[x],z=fa[y];  
25         if (z==s) {  
26             if (x==ch[y][0]) zig(x);  
27             else zag(x);  
28             break;  
29         }  
30         if (y==ch[z][0]) {
31             if (x==ch[y][0]) zig(y),zig(x);  
32             else zag(x),zig(x);  
33         }  
34         else {  
35             if (x==ch[y][1]) zag(y),zag(x);  
36             else zig(x),zag(x);  
37         }  
38     }  
39     //size[x]=size[ch[x][0]]+size[ch[x][1]]+1; 
40     if (s==0) root=x;
41 }  
42 inline void newnode(int &x,int fax,int key) {
43     x=++ind;
44     ch[x][0]=ch[x][1]=0;
45     fa[x]=fax;
46     k[x]=key;
47 }
48 inline int search(int w) {
49     int p,x=root;
50     while(x) {
51         p=x;
52         if(k[x]>w) x=ch[x][0];
53         else x=ch[x][1];
54     }
55     return p;
56 }
57 inline void ins(int w){
58     if (root==0) {
59         newnode(root,0,w);
60         return ;
61     }
62     int i=search(w);
63     if(w<k[i]) newnode(ch[i][0],i,w);
64     else newnode(ch[i][1],i,w);
65     splay(ind,0);
66 }
67 inline int pre(int x) {
68     int tmp=ch[x][0];
69     while(ch[tmp][1]) tmp=ch[tmp][1];
70     return k[tmp];
71 }
72 inline int suc(int x) {
73     int tmp=ch[x][1];
74     while(ch[tmp][0]) tmp=ch[tmp][0];
75     return k[tmp];
76 }
77 int main() {
78     int n,t,ans=0;
79     scanf("%d%d",&n,&t);
80     root=1;k[root]=t;
81     ch[root][0]=ch[root][1]=0;
82     fa[root]=0;//printf("hhh");
83     ans=t;ins(2100000);
84     ins(-2100000);
85     for (int i=2;i<=n;++i) {
86         if(scanf("%d",&t)==EOF) t=0;
87         ins(t);
88         int a=pre(root),b=suc(root);
89         ans+=min(t-a,b-t);
90     }
91     printf("%d\n",ans);
92     return 0;
93 }
View Code

 

转载于:https://www.cnblogs.com/TonyNeal/p/bzoj1588.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python----socket编程

socket 一、socket是什么&#xff1f; socket 通常也称为“套接字”&#xff0c;用于描述 IP 地址和端口&#xff0c;是一个通讯链的句柄。应用程序通常通过 “套接字”向网络发出请求或者应答网络请求。说白了&#xff0c;就是一种通讯机制。它类似于公司的电话客服部门&…

怎样编写测试类测试分支_测试技巧–不编写测试

怎样编写测试类测试分支对此没有太多疑问&#xff0c;测试代码的方式是一个有争议的问题。 不同的测试技术由于各种原因&#xff08;包括企业文化&#xff0c;经验和总体心理观点&#xff09;而受到不同开发人员的青睐。 例如&#xff0c;您可能更喜欢编写经典的单元测试&#…

linux文件权限umask,linux系统中UMASK权限的用法讲解

原标题&#xff1a;linux系统中UMASK权限的用法讲解umask一般是用在你初始创建一个目录或者文件的时候赋予他们的权限。这里要说明两点&#xff1a;1、针对目录来说x权限代表可以进入该目录&#xff0c;所以说对于这个权限初始赋值是没什么问题的;2、针对文件的x的权限代表执行…

怎么样才算高级java工程师

高级水平&#xff1a; 1.能对需求进行架构设计&#xff0c;选择框架以适应最合适的业务&#xff0c;作为某个项目的领导&#xff0c;带领团队完成项目。 2.有自己的开源项目&#xff0c;可以写出自己的组件&#xff0c;对开源的框架能够进行二次编写&#xff0c;java核心技术有…

Win32+API学习笔记:创建基本的窗口控件

创建一个标签 CreateWindowEx(0, "static", "姓名&#xff1a;", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 12, // xpos …

Autorize插件的使用方法

在Proxy或者Repeater有Request请求包后&#xff0c;要ctrlA全选&#xff0c;然后再右键发送到Autorize插件中&#xff1a; 如果只是像这样空白的发送是不会发送过去的&#xff1a;

粉丝提问:求问大神您会查exif吗?

无需下载安装任何软件,直接上传图片即可查看EXIF。支持JPEG、TIFF、CR2、NEF、XMP等多种图片格式破解Canon、

linux和windows的分区区别,Linux分区与Windows分区的区别

打开开始-管理工具-计算机管理&#xff0c;如下图所示&#xff1a;在Windows系统中&#xff0c;计算机的分区是用磁盘0&#xff0c;磁盘1&#xff0c;磁盘2&#xff0c;磁盘3来表示多块硬盘的&#xff0c;比如磁盘0表示第一块硬盘&#xff0c;磁盘2表示第二块硬盘&#xff0c;以…

《构建之法》--阅读(第13章-第17章)

第13章 软件测试 1.名词解释 Bug &#xff1a;软件的缺陷 Test Case &#xff1a;测试用例。测试用例描述了一个完整的测试过程&#xff0c;包括测试环境、输入、期望的结果等 Test Suite &#xff1a;测试用例集。即一组相关的测试用例 2.Bug解释与实例 <1>、Bug可以分解…

一个用于伪造IP地址进行爆破的BurpSuite插件:BurpFakeIP

BurpFakeIP介绍 一个用于伪造ip地址进行爆破的BurpSuite插件&#xff0c;burpsuite伪造ip可用于突破waf及进行安全规则绕过等场景&#xff1b;昨天我们分享了《BurpSuite IP代理扩展&#xff0c;使用AWS API网关动态更改请求&#xff1a;IPRotate_Burp_Extension》有同学也发现…

学习Spring-Cloud –编写微服务

继续我的Spring-Cloud学习历程&#xff0c; 之前我已经介绍了如何编写典型的基于Spring-Cloud和Netflix OSS的微服务环境的基础架构组件–在此特定实例中&#xff0c;有两个关键组件&#xff0c;用于注册和发现服务的Eureka和Spring Cloud用于维护服务配置集中式配置库的配置。…

CSS页面DEMO

层叠样式表(英文全称&#xff1a;Cascading Style Sheets)是一种用来表现HTML&#xff08;标准通用标记语言的一个应用&#xff09;或XML&#xff08;标准通用标记语言的一个子集&#xff09;等文件样式的计算机语言。CSS不仅可以静态地修饰网页&#xff0c;还可以配合各种脚本…

linux内核配置usb虚拟串口,Linux USB虚拟串口设备

Linux内核中usb设备侧驱动程序分成3个层次&#xff1a;UDC驱动程序、Gadget API和Gadget驱动程序。UDC驱动程序(USB控制器)直接访问硬件&#xff0c;控制USB设备和主机间的底层通信&#xff0c;向上层提供与硬件相关操作的回调函数。Gadget API是UDC驱动程序回调函数的简单包装…

linux 内核移植和根文件系统的制作【转载】

原文地址&#xff1a;http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html1.1 Linux内核基础知识 在动手进行Linux内核移植之前&#xff0c;非常有必要对Linux内核进行一定的了解&#xff0c;下面从Linux内核的版本和分类说起。 1.1.1 Linux版本 Linux内核的版本…

Chunked coding converter插件的使用方法

burp插件----Chunked coding converter url下载&#xff1a;https://github.com/zxl2605/chunked-coding-converter 安装步骤&#xff1a;BurpSuite -> Extender -> Extensions -> Add -> Extension Type: Python -> Select file: chunked-coding-converter.0.…

linux 提升cpu权限,CPUlimit有效防止Linux系统CPU过载

最近使用Nginx服务器测试 pagespeed 的加速效果时&#xff0c;发现这货会造成 CPU 占用过高&#xff0c;Nginx 经常 100%&#xff0c;尽管使用的是静态缓存&#xff0c;总是触发主机商的CPU占用上限&#xff0c;不停的被强制关机。发现 CPULimit 这款工具刚好可以解决这个问题&…

什么是CSS?你真的理解?

什么是 CSS? CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加到 HTML 4.0 中&#xff0c;是为了解决内容与表现分离的问题外部样式表可以极大提高工作效率外部样式表通常存储在 CSS 文件中多个样式定义可层叠为一个 样…

大数据公司

合肥盈云科技信息有限公司 中润普达&#xff08;集团&#xff09;公司转载于:https://www.cnblogs.com/hugh2006/p/4587232.html

domain hunter pro插件的使用方法

bilibili教程&#xff1a;https://www.bilibili.com/video/BV1eA411P7xC/ 安装 获取软件的Jar包&#xff0c;由于该软件是基于BurpSuite的插件程序。需要与BurpSuite一起使用。 安装后的界面效果 项目管理 创建一个新的项目&#xff0c;也可以打开已有的项目文件&#xf…

qt linux opensource ,QT opensource embedded linux 编…

建立自己的编译链文件夹 mkdir linux-mick-omap拷贝别的文件夹下&#xff0c;譬如linux-arm-g中的qmake.conf qplatformdefs.h到linux-mick-omap修改qmake.conf, 把arm-linux-gcc 和 arm-linux-g改成自己的arm-none-linux-gnueabi-gcc 和 arm-none-linux-gnueabi-g只需要修改前…