「HNOI2010」 弹飞绵羊 - 动态树LCT

「数据结构」Link-Cut Tree(LCT) Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 #1.0 简述 #1.1 动态树问题 维护一个森林,支持删除某条边,加入某条边,并保证加边、删边之后仍然是森林。我们需要维护这个森林的一些信息。 一般的操作有两点连通性,两点路径权值和等等。 #1.2 实链剖分 先来回顾一下树链剖分,我们可以按照子树大小进行剖分(重链剖分),也 阅读详情

题目描述

某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞。绵羊想知道当它从第i个装置起步时,被弹几次后会被弹飞。为了使得游戏更有趣,Lostmonkey可以修改某个弹力装置的弹力系数,任何时候弹力系数均为正整数。

输入格式

第一行包含一个整数n,表示地上有n个装置,装置的编号从0到n-1。

接下来一行有n个正整数,依次为那n个装置的初始弹力系数。

第三行有一个正整数m,

接下来m行每行至少有两个数i、j,若i=1,你要输出从j出发被弹几次后被弹飞,若i=2则还会再输入一个正整数k,表示第j个弹力装置的系数被修改成k。

输出格式

对于每个i=1的情况,你都要输出一个需要的步数,占一行。

数据范围

对于20%的数据n,m<=10000,对于100%的数据n<=200000,m<=100000

分析

对于iii个装置,若i+ki≤ni+k_i\le ni+ki​≤n,则Link(i,i+ki)Link(i,i+k_i)Link(i,i+ki​),否则可以从第iii个装置跳出,新建一个虚拟节点n+1n+1n+1,然后Link(i,n+1)Link(i,n+1)Link(i,n+1)。对于询问操作,相当于查询iii~n+1n+1n+1中间的节点个数-1,用size[x]size[x]size[x]来维护,先打通iii到n+1n+1n+1,再Splay(n+1)Splay(n+1)Splay(n+1),最后输出size[n+1]−1size[n+1]-1size[n+1]−1。对于修改操作,先将原来的CutCutCut掉,再更新,再重新LinkLinkLink。

当然,分块也是可以的A的,维护每块内所能跳到的其他块的位置,然后暴力跳即可。

代码

#include <iostream>
#include <cstdio>
using namespace std;
const int N=200005;
int n,m,s[N],f[N];
int a[N],c[N][2];
int r[N],st[N];
bool nroot(int x) {//是否为根 
	return c[f[x]][0]==x||c[f[x]][1]==x;
}
void Pushup(int x) {//向上更新 
	s[x]=s[c[x][0]]+s[c[x][1]]+1;
}
void Pushdown(int x) {//向下传标记 
	if (r[x]&&x) {
		r[x]=0;
		r[c[x][0]]^=1;
		r[c[x][1]]^=1;
		swap(c[x][0],c[x][1]);
	}
}
void Rotate(int x) {
	int y=f[x],z=f[y];
	int k=(c[y][1]==x),kk=(c[z][1]==y);
	if (nroot(y)) c[z][kk]=x;
	f[y]=x;
	c[y][k]=c[x][k^1];
	f[c[x][k^1]]=y;
	c[x][k^1]=y;
	f[x]=z;
	Pushup(x);
	Pushup(y);
}
void Splay(int x) {//SplayTree基本操作 
	int y=x,z=0;
	st[++z]=x;
	while (nroot(y)) st[++z]=(y=f[y]);
	while (z) Pushdown(st[z--]);
	while (nroot(x)) {
		y=f[x];z=f[y];
		if (nroot(y))
			Rotate((c[y][0]==x)^(c[z][0]==y)?x:y);
		Rotate(x);
	}
	Pushup(x);
}
void Access(int x) {//打通x~root的路径,使其成为一棵Splay 
	for (int y=0;x;x=f[y=x]) {
		Splay(x);
		c[x][1]=y;
		Pushup(x);
	}
}
void Makeroot(int x) {//置为根 
	Access(x);
	Splay(x);
	r[x]^=1;
}
void Split(int x,int y) {//打通x~y的路径,使其成为一棵Splay 
	Makeroot(x);
	Access(y);
	Splay(y);
}
void Link(int x,int y) {
	Makeroot(x);
	f[x]=y;
}
void Cut(int x,int y) {
	Split(x,y);
	f[x]=c[y][0]=0;
}
void Ask(int x,int y) {
	Split(x,y);//打通,由于打通后自动Splay
	//所以这里可以不用Splay 
	printf("%d\n",s[y]-1);
}
void Updata(int x,int z) {
	Cut(x,min(n+1,x+a[x]));//断边 
	a[x]=z;//改值 
	Link(x,min(n+1,x+a[x]));//连边 
}
int main() {
	scanf("%d",&n);
	for (int i=1;i<=n;i++) {
		scanf("%d",&a[i]);
		Link(i,min(n+1,i+a[i]));//Link 
	}
	scanf("%d",&m);
	for (int i=1;i<=m;i++) {
		int op,x,y;
		scanf("%d%d",&op,&x); 
		if (op==1) Ask(x+1,n+1);//注意下标+1 
		else {
			scanf("%d",&y);
			Updata(x+1,y);
		}
	}
	return 0;
}
科技中介服务机构想要提升服务效率,需要哪些数智工具支持?.docx 科技中介服务机构想要提升服务效率,需要哪些数智工具支持? 立即下载

相关推荐

usb 扩容盘检测修复工具源码,编译产物

usb 扩容盘检测修复工具源码,编译产物

bzoj2002Bounce 弹飞绵羊 动态树(Link-Cut-Tree)

2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 11830  Solved: 5986 [Submit][Status][Discuss] Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,

maxtir的博客 329

CloudCompare点云滤波实战:三种植被去除技术的对比与应用

本文详细对比了CloudCompare中三种植被去除技术(低通滤波、CSF滤波和坡度法)的实战应用与效果。通过具体案例和参数优化建议,帮助用户根据地形特征选择最佳滤波方法,提升点云数据处理精度和效率,特别适用于复杂场景下的植被去除需求。

weixin_30689307的博客 84

BZOJ 2002 Bounce 弹飞绵羊 [Hnoi2010]

弹飞绵羊题目的网址为:http://www.lydsy.com/JudgeOnline/problem.php?id=2002题目大意有N个点,每个点有一个系数a[i],你处于位置i可以走到i+a[i],若i+a[i]>n则你走出了地图。 现M个操作有两种: 1、把a[j]修改为k。 2、询问你位于点j时,需要走多少部走出地图。数据范围1<=n<=200000, 1<=m<=100000。题解

XianHaoMing的博客 3741

全网首发:香橙派5MAX安装ubuntu20.04(换了官方桌面)及ros,运行LIVOX-mid360混合固态激光雷达,实际测试fastlio(只能说可以跑,还是有点吃力)

独家发布!!!香橙派5MAX安装ubuntu20.04(换了官方桌面)及ros,运行mid360混合固态激光雷达,测试fastlio(只能说可以跑,还是有点吃力),国货也算崛起了。

2402_82745259的博客 5999

LTspice基础教程-028.Timestep too small

Q: “Timestep too small” error message A: If the LTspice program can’t find a solution for the guessed time step, then the program decreases the time step and tries again. This can’t work forever. If...

gaoyong_wang的博客 2万+

bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊 動態樹

2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit:10 SecMemory Limit:259 MBSubmit:4055Solved:2172[Submit][Status] Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmon...

alex151194310的博客 108

思科模拟器CIsco Packet Tracer利用三层交换机实现VLAN间路由

版权声明:如果对大家有帮助,大家可以自行转载的。 1.技术原理: 三层交换机具备网络层的功能,实现 VLAN 相互访问的原理是:利用三层交换机的路由功能,通过识别数据包的 IP 地址,查找路由表进行选路转发,三层交换机利用直连路由可以实现不同 VLAN 之间的相互访问。三层交换机给接口配置 IP 地址。采用 SVI(交换虚拟接口)的方式实现 VLAN 间互连。SVI 是指为交换机中的VLAN 创建...

qq_37992321的博客 1万+

【BZOJ2002】弹飞绵羊(HNOI2010)-LCT模板题

【BZOJ2002】弹飞绵羊(HNOI2010)-LCT模板题

Maxwei_wzj的OI世界 485

DeepSeek Harness 工程实践与高级特性:从测试到安全的完整指南

AI Agent 能执行命令、读写文件、自主决策,能力越强风险越大——删文件、泄密钥、死循环、竞态条件随时可能发生。本文是 DeepSeek Harness 系列第三篇,深入剖析其工程实践与高级特性:从单元测试到真实 API 冒烟测试的分层策略,拒绝 Mock 依赖、坚持"验证世界而非自我报告";从正交结果、规范化契约到 Dispose 静止的防御式编程铁律;以及跨平台多层进程沙箱、文件系统版本守卫、fail-closed 审批机制、模型编写的工作流引擎与上下文压缩等高级能力。

program哲学 207

关于瑞芯微SDK中buildroot的架构分析、配置细节、以及一些使用步骤

摘要:瑞芯微SDK基于Buildroot框架,针对RK3568等芯片提供定制化开发环境。核心目录包括buildroot(配置与编译框架)、kernel(定制内核)和u-boot(引导程序)。开发流程为:1)加载芯片默认配置;2)通过menuconfig定制系统(架构、内核、软件包等);3)可选修改内核配置。关键硬件适配需修改设备树(dts)和分区表(parameter.txt),系统行为通过启动脚本(S90network)调整。最终执行make编译生成可烧录固件。该框架通过配置文件驱动,实现从工具链构建到固

Hyjks的博客 1199

[LCT]BZOJ 2002——[Hnoi2010]Bounce 弹飞绵羊

2002: [Hnoi2010]Bounce 弹飞绵羊题目描述某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞。绵羊想知道当它从第i个装置起步时,被弹

CHN_JZ的博客 1110

2025年下半年网络规划设计师综合知识真题及答案解析

1983年,ARPANet完成技术转型,对此后的 Internet发展全关重要,这一转型是指( ) A.电路交换转向分组交换 B.商业化转型 C.民用化转型 D.从 NCP 协议转向 TCP/IP 答案:D 解析:ARPANet 最初使用 NCP (Network Control Protocol)协议进行主机问通信。1983年1月1日,ARPANet 正式切换到TCP/IP 协议族,为后续Internet的发展奠定了统一协议基础。

鹿鸣天涯 930

BSOJ3175:弹飞绵羊 LCT

3175 -- 【HNOI2010】弹飞绵羊 Description   Lostmonkey发明了一种超级反弹装置。   为了在绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿一条直线摆放 n个反弹装置,并按从前往后的方式将反弹装置依次编号为 0 到 n-1,对 0≤i≤n-1,为第 i 个反弹装置设定了初始弹力系数 ki,当绵羊

.. 452

化工设计软件:PDMS二次开发_(7).数据导入与导出技术

在某些复杂场景下,PDMS提供的标准API接口可能无法满足需求。此时,可以通过自定义API接口来实现特定的数据导入与导出功能。自定义设备导入API接口可以处理更复杂的设备数据格式。# 导入必要的库import pdms_api # 假设有一个PDMS API库# 定义自定义设备数据# 自定义设备导入API接口# 调用自定义设备导入API接口# 输出导入成功的消息print("自定义设备数据导入成功")在PDMS二次开发中,数据的导入与导出是关键的技术环节。

kkchenjj的博客 1486

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[bzoj2002][动态树]弹飞绵羊

2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 13160 Solved: 6694 [Submit][Status][Discuss] Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lo...

Gzb1128的栖息地 214

lwip-2.0.3

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

P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?LCT?...FAQ orz

好久没写博客了哈,今天来水一篇。_(:з」∠)_ 题目 :弹飞绵羊(一道省选题) 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞。...

Judge's class 251

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?

好久没写博客了哈,今天来水一篇。_(:з」∠)_ 题目 :弹飞绵羊(一道省选题) 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装...

weixin_30892987的博客 159

【分块】[HNOI2010]弹飞绵羊&分块大法祭

分块(似乎还有一种动态树(LCT)做法) 第一次学习分块,似乎有点小激动 这是黄学长的分块入门博客「分块」数列分块入门1 – 9 by hzwer 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,...

weixin_30544657的博客 110

LCT总结——应用篇(附题单)(LCT)

为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换。 LCT总结——概念篇戳这里 题单 灰常感谢XZY巨佬提供的强力资磁!(可参考XZY巨佬的博客总结) 题单对于系统地学习一个知识点还是有好处的。 所以蒟蒻搜集了各处的LCT题目(其实作为近年新兴的知识点,现有的好题不是很多,有些题树剖也可做) 大概按细化分类进行整理(类比下面的几个细化知识点,会有重复...

a83229442的博客 479

[学习笔记]动态树Link-Cut-Tree

参考&&推荐: LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay) [Link-Cut-Tree]【学习笔记】 一、概括 一种支持维护树的森林的算法。 采用实链剖分,多棵splay维护每个实链,键值就是节点的深度。 即,中序遍历就是这个链从上到下的节点组成。 同一个原树上的splay之间也连接,但是不同的实链的spl...

weixin_33918114的博客 106

动态树之 Link Cut Tree (做题记录)

LCT 题单做题记录 一、维护链信息 P3203 [HNOI2010]弹飞绵羊:维护一条路径的长度,由于题目大大降低了难度,所以只需要使用 accessaccessaccess 和 splaysplaysplay 两个操作即可。要学会灵活应用 LCT 中的函数,不要有刻板思维(如改变 cutcutcut 函数的写法)。 P1501 [国家集训队]Tree II:需要维护加标记、乘标记和翻转标记三个 lazytaglazytaglazytag。pushdownpushdownpushdown 时,先处

531 の 流 水 线 239

Link Cut Tree 总结

Link-Cut-Tree Tags:数据结构 ##更好阅读体验:https://www.zybuluo.com/xzyxzy/note/1027479 一、概述 \(LCT\),动态树的一种,又可以\(link\)又可以\(cut\) 引用:http://www.cnblogs.com/zhoushuyu/p/8137553.html 二、题目 初步 [x] P2147 [SDOI2008]C...

weixin_30629653的博客 251
上一篇: 「SDOI2011」 染色 - 树链剖分
下一篇: 「USACO2012Dec」 Running Away From the Barn - 左偏树
TbYangZ
博客等级 码龄8年 13粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值