【洛谷P3203】弹飞绵羊【分块】

BZOJ2002 [Hnoi2010]Bounce 弹飞绵羊 解题报告【数据结构】【分块】 BZOJ 2002 阅读详情

题目大意:

题目链接:https://www.luogu.org/problemnew/show/P3203
有 n n n个装置,每个装置会把羊往后弹 a [ i ] a[i] a[i],要求支持一下操作:

  • 1   x 1\ x 1 x,求从第 x x x个弹射装置开始需要弹多少次才能把羊弹走。
  • 2   x   y 2\ x\ y 2 x y,将第 x x x个弹射装置的 a [ i ] a[i] a[i]改为 y y y。

思路:

这道题不说是分块基本就没思路了。
但是一知道是分块就很好解了。
我们分成 n \sqrt n n ​个块,每一个弹射装置维护两个值:

  1. w [ i ] w[i] w[i],弹出这个块之后回到哪一个弹射装置。
  2. s [ i ] s[i] s[i],要多少次才能弹出这个块。

那么对于每一个操作:

  1. 如果是 1 1 1操作,那么就从点 x x x开始,相当于会弹 s [ x ] s[x] s[x]次到 w [ x ] w[x] w[x],那么再把 w [ x ] w[x] w[x]当作 x x x来继续求。
    每个块最多经过一次,有 n \sqrt n n ​个块,所以时间复杂度为 O ( n ) O(\sqrt n) O(n ​)
  2. 如果是 2 2 2操作,那么就把这个块暴力重新初始化一遍。这个块最多有 n \sqrt n n ​个元素,时间复杂度 O ( n ) O(\sqrt n) O(n ​)

总时间复杂度为 O ( Q n ) O(Q\sqrt n) O(Qn ​)。其中 Q Q Q为询问个数。


代码:

#include <cstdio>
#include <cmath>
using namespace std;

const int N=200100;
int n,Q,T,x,y,L[N],R[N],a[N],w[N],s[N],pos[N];

int ask(int x)
{
	int sum=0;
	while (x<=n)  //没有被弹飞
	{
		sum+=s[x];  //次数
		x=w[x];
	}
	return sum;
}

void change(int x,int y)
{
	a[x]=y;
	for (int i=x;i>=L[pos[x]];i--)  //暴力修改
		if (i+a[i]>R[pos[x]]) s[i]=1,w[i]=i+a[i];
			else s[i]=s[i+a[i]]+1,w[i]=w[i+a[i]];
}

int main()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	T=sqrt(n);
	for (int i=1;i<=T;i++)
	{
		L[i]=R[i-1]+1;
		R[i]=i*T;
	}
	if (R[T]<n)
	{
		T++;
		L[T]=R[T-1]+1;
		R[T]=n;
	}
	for (int i=1;i<=T;i++)
		for (int j=R[i];j>=L[i];j--)
		{
			pos[j]=i;
			if (j+a[j]>R[i]) s[j]=1,w[j]=j+a[j];
				else s[j]=s[j+a[j]]+1,w[j]=w[j+a[j]];
		}
	scanf("%d",&Q);
	while (Q--)
	{
		scanf("%d",&x);
		if (x==1)
		{
			scanf("%d",&x);
			printf("%d\n",ask(x+1));
		}
		else
		{
			scanf("%d%d",&x,&y);
			change(x+1,y);
		}
	}
	return 0;
}
ifix5.8连接ab plc的点-通过rslinx 以ifix连接ab plc的点为例 1.先在rslinx上把plc的点导出为opc server 2.使用opc power tool 作为opc client 去连接 3.保存到项目的PDB文件夹下面,并且以节点名命名。 也可以不以节点名命名,系统自动会生成一个以节点名命名的这种文件,就显得很乱。 同时,项目的PDB目录下面必须还得拷过来一个de... 阅读详情

相关推荐

中科蓝讯蓝牙耳机SDK实战:从目录解析到消息处理框架

本文深入解析中科蓝讯蓝牙耳机SDK的目录结构与消息处理框架,提供从硬件驱动到蓝牙功能定制的实战指南。重点剖析SDK核心模块如消息队列机制、按键事件处理及电量报告优化,并分享二次开发中的调试技巧与避坑经验,助力开发者高效完成TWS耳机功能定制。

weixin_30335575的博客 387

bzoj 2002(弹飞绵羊) 分块

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

weixin_38170853的博客 162

基于云盾构建等保三级Web安全体系:从合规要求到实战落地

网络安全等级保护(等保)是保障信息系统安全的重要制度,其核心原理是通过分级防护、动态调整的策略,构建纵深防御体系。在技术层面,等保要求覆盖物理环境、通信网络、区域边界、计算环境和安全管理中心等多个层面,旨在通过技术和管理相结合的方式,有效应对网络攻击和数据泄露风险。对于Web应用而言,满足等保三级要求具有极高的技术价值,它不仅是合规的刚性需求,更是提升业务系统整体安全水位、建立用户信任、保障业务连续性的关键工程实践。在云计算时代,利用云原生安全服务(如Web应用防火墙WAF、云安全中心、态势感知等)可以高效

weixin_29324877的博客 307

[HNOI2010]弹飞绵羊(分块)

分块大法好 ,刷分块落谷训练场,忽然看到这道题,大家都是什么lct裸体 我只想问问lct是啥,于是决定拿分块过这道题 先放题链接 [HNOI2010]弹飞绵羊(分块) 题意很简单就不解释了 先把分块分好 ,然后记录每个位置弹过一个块的步数,记录每次弹出这个块后的位置 如果要是单点修改的将块内重构就好了 #include<bits/stdc++.h> using n...

weixin_30684743的博客 168

C#实战:如何用Chart控件打造专业级数据可视化报表(附完整代码)

本文详细介绍了如何使用C#的Chart控件创建专业级数据可视化报表,涵盖柱状图、饼图和雷达图等多种图表类型的高级定制与交互增强。通过完整的代码示例,展示了从环境配置到动态数据绑定的全流程,助力开发者提升企业级应用的数据可视化能力。

ipfs8storage的博客 420

YOLOv8改进 | Conv篇 | DWRSeg扩张式残差助力小目标检测 (附修改后的C2f+Bottleneck)

本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv8中的C2f和Bottleneck模块,主要针对的是小目标检测,主要创新点可以总结如下:多尺度特征提取机制的深入研究和创新的DWR模块和SIR模块的提出这种方法使得网络能够更灵活地适应不同尺度的特征,从而更准确地识别和分割图像中的物体。通过本文你能够了解到DWRSeg的基本原理和框架,并且能够在你自己的网络结构中进行添加(DWRSeg需要增加一定的计算量一个DWR模块大概增加0.4GFLOPs)。

Snu77的博客 9571

BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 (动态树LCT)

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

weixin_34417183的博客 309

以阿克曼转向车为例对URDF和XACRO文件进行解读

   最近我在古月学院购买了在Gazebo中实现阿克曼转向车的仿真课程,课程资料的阿克曼小车的XACRO文件在Gazebo里加载的时候报了三个错误,在这之前,我没接触过URDF或XACRO文件,本篇文章就以这个阿克曼小车的XACRO文件为例,对URDF或XACRO文件的格式和内容进行解读,期望经过解读和学习,找到错误原因及所在,并解决这三个错误    先来放一下上面右图所示的模型的完整的XACRO文件: <?xml version="1.0"?> <!-- racecar.urdf.x

慕羽★的博客 3701

HYSBZ - 2002 :Bounce 弹飞绵羊 (分块算法)

HYSBZ - 2002 :Bounce 弹飞绵羊 (分块算法) 神奇的分块

污miao汪的博客 737

2023华为od机试C卷【推荐多样性】Java&Go 实现

推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略1.各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一元素,再从第二个列表中为每屏选择一个元素,依次类推2.每个列表的元素尽量均分为N份,如果不够N个,也要全部分配完,

MISAYAONE的博客 2180

Apifox接口测试+自动化测试

Apifox 接口测试+自动化测试快速入门!

程序员小杨哥的博客 1万+

洛谷 P3203:弹飞绵羊 ← 序列分块算法(单点更新、单点查询)

● 本题其实就是动态树 LCT 的模板题,这里用来练习分块。

hnjzsyjyj的专栏 966

【STM32Cube_14】使用硬件I2C读写环境光强度传感器(BH1750)

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设读取环境光强度传感器数据(BH1750)

Mculover666的博客(嵌入式) 7242

(分块)洛谷 P3203 弹飞绵羊 题解

个装置起步时,被弹几次后会被弹飞。为了使得游戏更有趣,L 可以修改某个弹力装置的弹力系数,任何时候弹力系数均为正整数。但是写完代码,兴冲冲交上去,TLE 3 个点。既然是跳跃,那就能联想到,要搞一个类似链表的数组,我们考虑对。如果想要一个老哥做,作者老矣不能饭否,去学 LCT 吧。个装置,每个装置设定初始弹力系数。,其实可以直接扫过去的,期望复杂度。的弹力装置的系数被修改成。个装置作分块处理,维护。个装置时,它会往后弹。个装置,则绵羊被弹飞。个装置,装置的编号从。个装置的初始弹力系数。

m0_60506105的博客 833

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

[分块] 洛谷 P3203 弹飞绵羊

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

weixin_30646315的博客 75

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

[HNOI2010]弹飞绵羊--分块(洛谷P3203)

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

孤风的博客 318

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

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

分块-洛谷P3203 [HNOI2010]BOUNCE 弹飞绵羊

https://www.luogu.org/problem/show?pid=3203#sub 这道题第一次TLEl,然后改了改变成AC; 所以说这种题目,时限卡得很紧,一定要思考理论复杂度和常数的问题; 据说LCT 我用分块做,其实我并不是怎么理解分块的用途,貌似能用分块做,时限能接受,就可以分块暴力; 首先考虑两种暴力做法:对于操作1,直接修改,查询的时候O(N)模拟。或者修改的时候O(

我怎么这么菜的呢 483

洛谷-P3203 弹飞绵羊 分块

题目 题目链接 题意 据说这道题要用一道叫做LCT的数据结构,然而我不会。。。 一排有n个弹簧装置,从第iii个可一往后跳k[i]k[i]k[i]步。 修改:修改某个位置弹簧的弹性。 查询:询问从某个位置出发弹多少次就弹飞了。 题解 分块首先都要先从暴力开始想起: 我们记录从任意一个点出发,下一次能跳到哪里,这样的话我们每次询问,只需要一只沿着这条链往下走即可,显然最坏的时...

SUNSET 247

洛谷 P3203 [HNOI2010]弹飞绵羊 分块

我们只需将序列分成 n\sqrt{n}n​ 块,对于每一个点维护一个 val[i]val[i]val[i],to[i]to[i]to[i],分别代表该点跳到下一个块所需要的代价以及会跳到的节点编号。在查询时,我们最多会跳 n\sqrt{n}n​ 块,修改的时候将节点所在区间暴力修改即可。 Code: #include&lt;cstdio&gt; #include&lt;cmath&gt; #inc...

EM LGH 214

洛谷 P3203 [HNOI2010]BOUNCE 弹飞绵羊(分块)

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

Gxyhqzt的博客 445

Bzoj2002/洛谷P3203 [HNOI2010]弹飞绵羊(分块)

题面 Bzoj 洛谷 题解 大力分块,分块大小\(\sqrt n\),对于每一个元素记一下跳多少次能跳到下一个块,以及跳到下一个块的哪个位置,修改的时候时候只需要更新元素所在的那一块即可,然后询问也是\(\sqrt n\)的模拟。 #include <cmath> #include <cstdio> #include <cstring> #include &lt...

weixin_30746117的博客 136

9月11分块专题训练

共三道题,只不过第三题还没做出来。。,先把前2题总结写下吧。 教主的魔法 洛谷P2801 题目描述:有N个数,有两种操作,区间修改(加)、区间询问。 输入:第1行有两个整数n、m。第2行有n个正整数。第3行到第m + 2行,每行是一个操作, 有两种操作: (1)第一个字母是“M”,后面三个数字L、R、W,表示对闭区间[L, R]内每个数加上W。 (2)第一个字幕是A,后面三个数字L、R、C,询问闭区间[L, R]内有多少数字大于等于C。 输出:对每个“A”询问输出一行,包含一个整数,表示大于等于C的数有多少

Emma_goddess的博客 229
上一篇: 【USACO2.3】解题报告
下一篇: 【USACO2.4.3】【洛谷P1522】牛的旅行【最短路】【并查集】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值