[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;您可能更喜欢编写经典的单元测试&#…

怎么样才算高级java工程师

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

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;以…

一个用于伪造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用于维护服务配置集中式配置库的配置。…

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

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

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 这款工具刚好可以解决这个问题&…

domain hunter pro插件的使用方法

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

CSS基本语法?

CSS 实例 CSS 规则由两个主要的部分构成&#xff1a;选择器&#xff0c;以及一条或多条声明: 选择器通常是您需要改变样式的 HTML 元素。 每条声明由一个属性和一个值组成。 属性&#xff08;property&#xff09;是您希望设置的样式属性&#xff08;style attribute&#x…

BurpSuite插件 -- FastjsonScan(反序列化检测)

你可以因为现任不好二分手&#xff0c;但千万不要认为别人更好&#xff0c;永远有人更好&#xff0c;眼下便是更好。。。 ---- 网易云热评 一、插件介绍&#xff1a; 一个简单的Fastjson反序列化检测burp插件&#xff0c;我在挖洞的时候看到一些json请求总是想要检测一下有没有…

查看linux电脑总内存,如何查看Linux系统中的内存使用情况的命令呢?

有些命令可用于检查Linux系统中的内存使用情况。这是一些更好的命令。有很多工具可以查看Linux系统中的内存使用情况。一些命令被广泛使用&#xff0c;例如free和ps。其他命令允许以多种方式显示系统的性能统计信息&#xff0c;例如top。在本文中&#xff0c;我们将介绍一些命令…

【工具使用】Xray与Burp联动--流量转发插件Passive Scan Client

Burp被动扫描流量转发插件:Passive Scan Client 0x01 插件编译 插件地址&#xff1a;https://github.com/c0ny1/passive-scan-client rootkali:~# git clone https://github.com/c0ny1/passive-scan-client.git rootkali:~# cd passive-scan-client/ rootkali:~/passive-scan…

linux 用mutex定义一个linkedlist,【基于LINUX的操作系统实验教程最终版材料】

(基于LINUX的操作系统实验教程)(最终版)《基于LINUX的操作系统实验教程.doc》由会员分享&#xff0c;可免费在线阅读全文&#xff0c;更多与《(基于LINUX的操作系统实验教程)(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、b&#xff1b;*Waitonthe…

服务器硬件监控转载:

转载&#xff1a;http://nolinux.blog.51cto.com/4824967/1664664 前一周上架服务器&#xff0c;本来准备把针对服务器的硬件监控这一部分总结下成文&#xff0c;结果过个端午给过忘了。。。今天就又整理了下&#xff0c;在这里分享给51博友&#xff0c;也算是对自己前段工作的…

验证码识别Burp reCAPTCHA插件使用

介绍 Burp的reCAPTCHA也可用来识别验证码&#xff0c;github地址&#xff1a;https://github.com/bit4woo/reCAPTCHA&#xff0c;下载相应的jar包添加到burp中&#xff0c;位置在extender-extensions-add下&#xff0c;添加成功后burp模块栏会多出reCAPTCHA一栏&#xff0c;如下…

linux下的五种io模型,Linux下的五种IO模型

Java中提供的IO有关的API&#xff0c;在文件处理的时候&#xff0c;其实依赖操作系统层面的IO操作实现的(关于Java对IO的三种封装&#xff0c;可见我的另一篇博客)开门见山&#xff0c;Linux下的如中IO模型&#xff1a;阻塞IO模型&#xff0c;非阻塞IO模型&#xff0c;IO复用模…