bzoj1588 [HNOI2002]营业额统计 (Splay)

BZOJ-1588: [HNOI2002]营业额统计 (set查找前驱后继 splay练习题) splay一道模板题,联系简单的插入删除寻找前驱后继的操作。题意:4e4天,每天有一个营业额,找到当天之前营业额与当天营业额差值最小的一天,然后累加这个差值。 阅读详情

题意:中文题。。不多说。

这题就是裸的Splay模板。。。但是出了一个问题。。导致我WA了12次(最后随机数对拍才找到)。。。

没插入一个点,把这个点旋转到根,然后找到根的左子树最靠右边的的,根的右子树最靠左边的点,然后相减处理下就好。。。

这里我是WA在,每把一个点旋转到根,忘记把表示根节点的那个点修改成根了。。。然后还RE了几发,原因是我写的是多组数据(测试是单组数据),然后我需要初始化,删除整个树的时候指针可能越界访问了。。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int MAXN=500010;
struct Node
{
	Node *ch[2];
	Node *fa;
	int val;
}p[MAXN];
Node *null=&p[0];
int tot;
Node *root=null;
void Rotate(Node *x,int c)
{
	Node *y=x->fa;
	y->ch[!c]=x->ch[c];
	if(x->ch[c]!=null)
		x->ch[c]->fa=y;
	x->fa=y->fa;
	if(y->fa!=null)
	{
		if(y->fa->ch[0]==y)
			y->fa->ch[0]=x;
		else
			y->fa->ch[1]=x;
	}
	y->fa=x;
	x->ch[c]=y;
	if(y==root)
		x=root;
}
void splay(Node *x,Node *f)
{
	while(x->fa!=f)
	{
		if(x->fa->fa==f)
		{
			if(x->fa->ch[0]==x)
				Rotate(x,1);
			else
				Rotate(x,0);
		}
		else
		{
			Node *y=x->fa,*z=y->fa;
			if(z->ch[0]==y)
			{
				if(y->ch[0]==x)
					Rotate(y,1),Rotate(x,1);
				else
					Rotate(x,0),Rotate(x,1);
			}
			else
			{
				if(y->ch[1]==x)
					Rotate(y,0),Rotate(x,0);
				else
					Rotate(x,1),Rotate(x,0);
			}
		}
	}
}
Node *new_Node(int val)
{
	Node *rt=&p[++tot];
	rt->ch[0]=rt->ch[1]=rt->fa=null;
	rt->val=val;
	return rt;
}
Node *root1=null;
Node *insert(Node *rt,int val)
{
	if(rt==null)
	{
		rt=new_Node(val);
		root1=rt;
		return rt;
	}
	if(rt->val==val)
		return rt;
	if(rt->val>val)
	{
		rt->ch[0]=insert(rt->ch[0],val);
		rt->ch[0]->fa=rt;
	}
	else
	{
		rt->ch[1]=insert(rt->ch[1],val);
		rt->ch[1]->fa=rt;
	}
	return rt;
}
Node *Delete(Node *&rt)
{
	if(rt==null)
		return null;
	if(rt->ch[0]!=null)
		rt->ch[0]=Delete(rt->ch[0]);
	if(rt->ch[1]!=null)
		rt->ch[1]=Delete(rt->ch[1]);
	rt=null;
	return rt;
}
int main()
{
	int n,i;
	null->val=0;
	//freopen("out.txt","r",stdin);
	//freopen("out1.txt","w",stdout);
	while(scanf("%d",&n)==1)
	{
		tot=0;
		int x;
		int ans=0;
		for(i=1;i<=n;i++)
		{
			x=0;
			scanf("%d",&x);
			root1=null;
			root=insert(root,x);
			if(root1==null)
				continue;
			splay(root1,null);
			root=root1;	//根节点要随着相应的改变
			if(i==1)
			{
				ans+=x;
				continue;
			}
			Node *L,*R;
			L=root1->ch[0];
			while(L!=null&&L->ch[1]!=null)
				L=L->ch[1];
			R=root1->ch[1];
			while(R!=null&&R->ch[0]!=null)
				R=R->ch[0];
			int temp1=1<<30,temp2=1<<30;
			if(L!=null)
				temp1=x-(L->val);
			if(R!=null)
				temp2=(R->val)-x;
			int temp=min(temp1,temp2);
			ans+=temp;
		}
		printf("%d\n",ans);
		root=Delete(root1);
	}
	return 0;
}


深入解析路科验证V0实验lab1:SV接口与时钟块实战 本文深入解析了路科验证V0实验Lab1的核心内容,重点阐述了SystemVerilog接口与时钟块在验证环境搭建中的关键作用。通过拆解router_io接口设计、时钟块同步机制及程序块封装,详细讲解了如何构建稳定可靠的验证通信基础,并提供了复位时序分析与常见调试技巧,为后续复杂验证打下坚实基础。 阅读详情

相关推荐

C# 实现文件和字符串的AES加密解密

C# 实现文件和字符串的AES128加密解密

m0_72044573的博客 5935

bzoj 1588 hnoi2002营业额统计 splay

今天下午加半个晚上终于对照着lkx的代码学会splay了。。明天巩固一下再写点题。。 话说lkx的代码真是凝练,看的就很享受,话说我学splay学了快三个小时 智商真是硬伤。。。 不管怎么说还是写出来了hnoi2002的营业额统计,明天写hnoi2004的题 下面是代码 #include #include #include #include #define MAX 35000+9 us

wbysr 932

ATAC-seq差异分析实战:从原始数据到GO富集(R/Bioconductor全流程)

本文提供了ATAC-seq差异分析的完整R/Bioconductor实战流程,涵盖从原始数据准备、一致峰集构建、计数矩阵生成,到使用DESeq2进行差异可及性分析,以及差异峰的基因组注释与GO富集分析。文章详细讲解了关键步骤、参数设置和常见问题,旨在帮助研究者获得可靠且可解释的生物学结果。

weixin_29246195的博客 230

bzoj 1588 [HNOI2002]营业额统计 splay

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 10598  Solved: 3691 [Submit][Status][Discuss] Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tige

kimnoic的专栏 392

基于 MATLAB 的综合能源系统建模:全面解析与案例应用 

本文详细介绍了基于 MATLAB 的综合能源系统建模相关知识,包括 MATLAB 在综合能源建模中的优势、综合能源系统各组件和网络的建模方法,并通过园区综合能源系统的案例展示了从建模到优化调度求解以及结果分析的全过程。在当今全球能源格局深刻变革的背景下,综合能源系统(Integrated Energy System,IES)作为一种创新的能源供应体系,整合了多种能源形式,如电力、热力、燃气等,以实现能源的高效生产、传输、分配和利用。需要考虑燃气的压力、流量特性以及管道的阻力特性等。

qq_57128262的博客 1336

LTspice第三方SPICE模型集成全流程指南

SPICE模型是电子电路仿真的核心基础,它通过数学方程描述半导体器件的非线性、温度依赖与寄生特性,决定仿真结果是否具备工程可信度。其技术价值在于 bridging 理论参数与实测行为,显著提升电源、电机驱动及逻辑电路设计的一次成功率。典型应用场景包括IGBT开关损耗分析、LDO瞬态响应验证、CMOS逻辑门传播延迟评估等。而LTspice作为轻量级工业级工具,依赖用户主动集成原厂提供的.subckt或.model文本模型——这正是‘LTspice导入SPICE模型’和‘74HC14 SPICE模型’等高频搜索

weixin_33868027的博客 307

BZOJ1588[HNOI2002]营业额统计【CDQ分治 or Splay】

[HNOI2002]营业额统计[HNOI2002]营业额统计[HNOI2002]营业额统计 Description: 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的...

qq_43710979的博客 237

开题报告该怎么写

考研即将来临,而一般很多大学都会选择在考研结束之后开始安排选题和开题报考(考研之前一般都不谈,老师也很人性化的,不愿意耽误你的复习) 但无论怎么推迟,我们最终都需要去面对并完成这些任务。 现在我就要教大家该如何写一个完整的开题报告! 准备模板。不同的学校有不同的格式,一般情况你的导师会给你们一个学校的标准格式,这个不用太费心。有了模板我们就可以按照模板的“线索”一步一步填充完成即可! 一般大致格式可谓: 研究背景/论文的目的、背景和意义 我们需要写明选择该题目的...

wuyueweifeng的博客 1096

BZOJ1588 HNOI2002 营业额统计 [Splay入门题]

[HNOI2002]营业额统计 Time Limit:5 SecMemory Limit:162 MBSubmit:4128Solved:1305 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营...

dezhen7015的博客 182

AI智算-K8s如何利用IB RDMA网络加速大模型分布式训练

在AI人工智能领域,大模型的微调是提升性能不可或缺的一环。通过结合InfiniBand RDMA网络的高速互联、Kubernetes的云原生容器化部署,以及智能算力调度平台,可以打造一个高效、灵活且可扩展的分布式训练环境。

Kason_iWiki 816

华为OD机试真题-查找单入口空闲区域(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【查找单入口空闲区域】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 查找单入口空闲区域。

qq_45776114的博客 1268

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

Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业...

dataxiang6224的博客 176

杰理JL7033C芯片运行SoundFont音色库教程

本教程介绍如何在杰理JL7033C芯片上移植TinySoundFont音色库,实现MIDI播放功能。关键步骤包括:获取TinySoundFont开源代码,创建音色库声音播放数据流,封装核心功能文件。硬件需配备外部PSRAM和NOR FLASH存储音色库,软件使用杰理SDK和工具链。移植后系统可支持40个voice,满足MIDI播放和电子琴演奏需求。教程详细说明了代码移植过程,包括音色库文件处理、内存配置和音频流水线设置。

qq_42014563的博客 611

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

来自HNOI 2002营业额的统计一题,这题以前是用链表水过的,最近看见许多splay的题,赶紧张一下知识。 题目大意就是对于一个序列,输出每个元素与它之前元素的差的最小值的和。先说链表的方法吧。 大概就是sort一下,记录每个点的rank。然后链表一下,很好理解,复杂度nlogn,瓶颈在于排序。 #include<cstdio> #include<algo...

dizou7578的博客 121

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【BZOJ1588】【HNOI2002】营业额统计 splay

splay的一些简单功能实现(最简单的一棵SPT)。

辗转山河弋流歌 1550

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【bzoj1588】[HNOI2002]营业额统计 Splay

Description营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况

DQS的树洞 985

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

bzoj1588 [HNOI2002]营业额统计 splay

Description营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况

olahiuj的博客 330

hnoi2002 bzoj1588 营业额统计【splay】【有坑。。】

大水题啊很多种方法  对于开始学splay的我  就当一个练手题了。。。特别吐槽bzoj数据不对有些数据说好的n行却读入不够n行加上    if(scanf("%d",&amp;t) == EOF) t = 0;才能A草害我白错几次幸好用小号、。。。。#include &lt;cstdio&gt; #include &lt;iostream&gt; #define D 100000 #defin...

leijp 484

[BZOJ1588]HNOI2002营业额统计|splay

splay入门题。。将n个数依次插入,查询第i个数之前的数中它的前缀和后缀,选择delta小的更新答案即可。。注意无前(后)缀或者有相等的情况。。 很久以前的代码: #include #include #include using namespace std; const int MAX=999999999; int pre[100010],c[100010][3],num[100010],i

Tag_king的专栏 531

bzoj1588: [HNOI2002]营业额统计 平衡树 Splay

bzoj1588: [HNOI2002]营业额统计 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在

maxtir的博客 263

BZOJ-1588 [HNOI2002]营业额统计 【splay || set】

Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这...

143

[BZOJ1588][HNOI2002][Treap][Splay]营业额统计[水题]

[BZOJ1588][HNOI2002][Treap][Splay]营业额统计[水题]

Benjamin P.M. Lee 1207

bzoj 1588: [HNOI2002]营业额统计(splay入门)

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 题解:这题如果用普通的bst的话是可以过时间差不多4s左右如果用splay的话是140ms。 由于splay可以有序的插入,各种操作都不会改变中序遍历的结果,而且splay每次可以将插入的位置通过旋转到根的位置,那么这题就可以通过寻找根节点的前驱最大值和后继最小值...

awow80285的博客 151

BZOJ1588[HNOI2002]营业额统计(Splay)

题目中“最小波动值”的意思是,之前的所有数中与当前数值的差的绝对值最小值是多少。 做法是Splay求前驱和后继: #include&amp;lt;bits/stdc++.h&amp;gt; using namespace std; const int maxn=40005; struct node{ int fa,ch[2]; int cnt,siz; int val; }t[maxn...

Apel_dey 371
上一篇: HDU3487 Play with Chain (Splay)
下一篇: bzoj2038 [2009国家集训队]小Z的袜子(hose) (分块)
eeeaaaaa
博客等级 码龄12年 2粉丝 155原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值