洛谷p2234/BZOJ1588 [HNOI2002]营业额统计

题目链接:
洛谷
BZOJ


分析:

好像没有什么好说的就是一个平衡树的板子……唯一要注意的就是这里要找的并不是严格的前驱和后继,因为如果找到之前某一天的营业额和它相等那么差就是0,所以我们仍然在结构体中开一个域cnt来存储同一个元素存储了多少次,如果a[p].cnt>1说明这个元素已经出现了不止一次了,那么直接跳出循环,返回a[p].val即可。

这一段代码贴在这里:

if(val==a[p].val){if(a[p].cnt>1){ans=p;break;}...
}

然后说一下我的沙雕错误……建树的时候手一抽在左子树上压了个INF,在右子树上压了个-INF,然后敲敲打打找了两个小时的bug……
对于这件事我只想说:妈的智障!


全部代码如下:

#include<bits/stdc++.h>
#define maxn 40000
using namespace std;
struct treap{int val;int l,r;int dat;int size;int cnt;
}a[maxn];
int tot,root,n,inf=0x7fffffff,ans=0;inline int read(){int cn=0,f=1;char c;c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){cn=cn*10+c-'0';c=getchar();}return cn*f;
}inline int New(int val){a[++tot].val=val;a[tot].dat=rand();a[tot].cnt=a[tot].size=1;return tot;
}inline void update(int p){a[p].size=a[a[p].l].size+a[a[p].r].size+a[p].cnt;
}inline void build_tree(){New(-inf),New(inf);root=1;a[1].r=2;update(root);
}void zig(int &p){int q=a[p].l;a[p].l=a[q].r,a[q].r=p,p=q;update(a[p].r),update(p);
}void zag(int &p){int q=a[p].r;a[p].r=a[q].l,a[q].l=p,p=q;update(a[p].l),update(p);
}void insert(int &p,int val){if(p==0){p=New(val);return;}if(val==a[p].val){a[p].cnt++,update(p);return;}if(val<a[p].val){insert(a[p].l,val);if(a[p].dat<a[a[p].l].dat)zig(p);}else{insert(a[p].r,val);if(a[p].dat<a[a[p].r].dat)zag(p);}update(p);
}int get_pre(int val){int ans=1;//a[1].val==-infint p=root;while(p){if(val==a[p].val){if(a[p].cnt>1){ans=p;break;}if(a[p].l>0){p=a[p].l;while(a[p].r>0)p=a[p].r;ans=p;}break;}if(a[p].val<val&&a[p].val>a[ans].val) ans=p;p=val<a[p].val?a[p].l:a[p].r;}return a[ans].val;
}int get_next(int val){int ans=2;// a[2].val==infint p=root;while(p){if(val==a[p].val){if(a[p].cnt>1){ans=p;break;}if(a[p].r>0){p=a[p].r;while(a[p].l>0)p=a[p].l;ans=p;}break;}if(a[p].val>val&&a[p].val<a[ans].val) ans=p;p=val<a[p].val?a[p].l:a[p].r;}return a[ans].val;
}int main(){
//  freopen("turnover.in","r",stdin);
//  freopen("turnover.out","w",stdout);n=read();build_tree();srand(19260817);for(register int i=1;i<=n;i++){int x;x=read();insert(root,x);if(i==1)ans+=x;else{if(get_pre(x)==-inf){ans+=get_next(x)-x;continue;}if(get_next(x)==inf){ans+=x-get_pre(x);continue;}ans+=min(x-get_pre(x),get_next(x)-x);}
//      cout<<ans<<endl;}printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/kma093/p/9744022.html

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

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

相关文章

WSDL中文版——详解

为什么使用WSDL? 像Internet协议之类的标准有没有为权威所利用&#xff0c;或者人们这样看待它是因为顺之所获的好处远远超出了代价&#xff1f;曾经有许多试图建立的标准都流产了。有时候&#xff0c;那些还没有普遍使用的标准甚至由法令或政府规定强行推出&#xff1a;Ada语…

设备树和pinctrl粗解

上次文章中 我以DS18b20为例&#xff0c;在设备树中定义了ds18b20的资源&#xff08;device&#xff09;&#xff0c;当时是依葫芦画瓢&#xff0c;没有深入探究&#xff0c;本文主要探讨下pin在设备树中的描述 参考文章&#xff1a;Linux内核中的GPIO系统之&#xff08;3&…

八大排序算法(C语言实现)

摘自&#xff1a;八大排序算法&#xff08;C语言实现&#xff09; 作者&#xff1a;2021dragon 发布时间&#xff1a; 2021-05-16 10:46:37 网址&#xff1a;https://blog.csdn.net/chenlong_cxy/article/details/116563972 目录 直接插入排序希尔排序选择排序堆排序冒泡排序快…

python qq签到_Yii Framework 中文网每天签到 Python 脚本

Yii 春节前的重磅新闻&#xff1a;Yii 2.0.16 版本发布了经过国内 Yii 使用者坚持不懈的进行国际化翻译&#xff0c;以及在中国进行大量的宣传和推广&#xff0c;Yii China 目前已经成为全球最大的 Yii 中文社区也就是 Yii Framework 中文网&#xff0c;地址为 www.yiichina.co…

codeforces 1060 A

https://codeforces.com/contest/1060/problem/A 题意&#xff1a;电话号码是以8开头的11位数&#xff0c;给你n 个数问最多可以有多少个电话号码 题解&#xff1a;min&#xff08;8的个数&#xff0c;n/11&#xff09; 代码如下&#xff1a; #include <map> #include &l…

嵌入式linux 自动获取IP 及 自动校时

最近要调用百度人脸识别API做个东西&#xff0c;发现百度API在桌面端QT程序跑的贼溜&#xff0c;可以到了嵌入式板子上发现就post没了返回信息。 一、嵌入式端udhcpc自动获取IP 1.在开发板建立文件夹#mkdir /usr/share/udhcpc/ -p 2.先拷贝busybox 源码目录下的 busybox-1.27…

MYSQL MVCC实现及其机制

多版本并发控制 Multiversion Concurrency Control 大部分的MySQL的存储 引擎&#xff0c;比如InnoDB&#xff0c;Falcon&#xff0c;以及PBXT并不是简简单单的使用行锁机制。它们都使用了行锁结合一种提高并发的技术&#xff0c;被称为MVCC&#xff08;多版本并 发控制&#x…

树莓派外设开发之控制继电器(组)

目录控制继电器控制继电器组控制继电器 选择7号引脚作为继电器信号输出控制端。 代码&#xff1a; #include <wiringPi.h> #include <stdio.h> #define SWITCHER 7 // 7为树莓派物理引脚编码和wiringPi编码。在树莓派功能名为GPIO.7int main() {int cmd;if( wiri…

piovt table python_python – Pandas:pivot和pivot_table之间的区别...

我有以下数据帧.df.head(30)struct_id resNum score_type_name score_value0 4294967297 1 omega 0.0648401 4294967297 1 fa_dun 2.1856182 4294967297 1 fa_dun_dev 0.0000273 4294967297 1 fa_dun_semi 2.1855914 4294967297 1 ref -1.1911805 4294967297 2 rama -0.7951616…

读《系统虚拟化-原理与实现》-第一章

一、虚拟化的实现: 在系统中加入一个虚拟化层&#xff0c;虚拟化层将下层资源抽象成另一形式的资源&#xff0c;提供给上层使用 1. 是虚拟化迁移的基础 2. 提高了移植性 二、几种虚拟化 1.硬件抽象层上的虚拟化 通过虚拟硬件抽象层来实现虚拟机 2.操作系统层上的虚拟化 操…

怎样查看电脑开机记录

在Windows XP中&#xff0c;我们可以通过“事件查看器”的事件日志服务查看计算机的开、关机时间。因为事件日志服务会随计算机一起启动和关闭&#xff0c;并在事件日志中留下记录。 在这里有必要介绍两个ID号&#xff1a;6006和6005。在事件查看器里ID号为6006的事件表示事件日…

[BZOJ2725/Violet 6]故乡的梦

Description Input Output Sample Input 6 7 1 2 1 2 3 1 3 4 2 4 5 1 5 6 1 1 3 3 4 6 3 1 6 4 1 2 1 3 4 3 6 5 Sample Output 7 6 Infinity 7 HINT 其实这题和[TJOI2012]桥基本差不多&#xff0c;如果不是最短路径上的边&#xff0c;那直接输出最短路即可。否则就按照[TJOI2…

智能家居 (3) ——智能家居工厂模式介绍实现继电器控制灯

目录智能家居工厂模式整体设计框架继电器控制灯代码contrlEquipments.h 文件&#xff08;设备类&#xff09;mainPro.c 文件&#xff08;主函数&#xff09;bathroomLight.c 文件&#xff08;浴室灯&#xff09;secondfloorLight.c 文件&#xff08;二楼灯&#xff09;livingro…

机器人离线编程画圆误差解决方案_工业机器人离线编程-误差分析和解决方案...

编&#xff1a;张山发&#xff1a;03/03/2019按&#xff1a;为便于更多读者朋友了解工业机器人离线编程/仿真&#xff0c;本文中尽量规避专业名词和深入的专业讲解。——————————————————————————————————国内工业机器人应用领域越来越广&…

读《系统虚拟化-原理与实现》-第二章

x86构架及操作系统概述 x86内存构架 地址空间和地址 物理地址空间&#xff1a;内存和其他硬件资源组合到一起&#xff0c;分布在CPU的物理地址空间内&#xff0c;CPU使用物理地址索引这些资源 线性地址空间&#xff1a;一个平台只有一个物理地址空间&#xff0c;但每个程序都…

SCCM OS播发

SCCM OS播发1.在分发点启用PXE支持2.将启动映像包分发到分发点:需要将x86和x64都分发到分发点&#xff0c;如果只分发x64&#xff0c;在客户端pxe启动时会出现 no response from wds server.3.安装好模板机4.使用驱动精灵将驱动备份出来后&#xff0c;导入到SCCM中5.创建任务序…

crm——stark组件核心原理

关于stark组件的简要介绍&#xff1a;启动后、路由加载前定制一段代码。a. 创建一个 stark app 组件b. 编写ready方法1 from django.apps import AppConfig2 3 4 class StarkConfig(AppConfig):5 name stark6 7 def ready(self):8 from django.utils.module_…

智能家居 (4) ——工厂模式火焰报警

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

tplink软件升级有用吗_tp-link路由器固件怎么升级更新

展开全部升级TP-LINK路由器32313133353236313431303231363533e58685e5aeb931333433623061软件方法分为如下三种&#xff0c;请结合实际情况选择升级方法&#xff1a;类型一、云服务器自动推送升级软件路由器WAN口联网成功后&#xff0c;在路由器管理界面登录TP-LINK ID&#xf…

java-多线程操作全(Thread)-Timer简单使用

一、 多线程概念和作用 线程指进程中的一个执行场景&#xff0c;也就是执行流程&#xff0c;那么进程和线程的区别是什么 1.每个进程是一个应用程序&#xff0c;都有独立的内存空间 2.同一个进程中的线程共享其进程中的内存和资源 (共享的内存是堆内存和方法内存&#xff0c;栈…