【BZOJ2002】弹飞绵羊

2023-10-25 03:08
文章标签 绵羊 bzoj2002 弹飞

本文主要是介绍【BZOJ2002】弹飞绵羊,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

Lostmonkey发明了一种超级反弹装置。为了在绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿一条直线摆放 n个反弹装置,并按从前往后的方式将反弹装置依次编号为 0 到 n-1,对 0≤i≤n-1,为第 i 个反弹装置设定了初始弹力系数 ki,当绵羊落到第 i 个反弹装置上时,它将被往后弹出 ki 步,即落到第 i+ki 个反弹装置上,若不存在第i+ki个反弹装置,则绵羊被弹飞。绵羊想知道: 从第i个反弹装置开始, 它被弹出几次 (含被弹飞的那次)后会被弹飞。为使游戏更有趣,Lostmonkey 还可以修改某个反弹装置的弹力系数,但任何时候弹力系数均为正整数。

Solution

这个题目不就是LCT的例题嘛?

然而我这个蒟蒻并不会LCT。

那还有什么方法呢?

分块大法好!分块大法好!分块大法好!

nexti 表示 i 跳到下一个块后的位置,stepi表示 i 跳到nexti所需步数。

询问时就单点修改,重构当前块。

查询时就直接跳就行了。

预处理 O(n) ,询问和查询都是 n 的。

Code

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
#define N 200001
using namespace std;
int a[N];
int be[N];
int nx[N],bs[N];
int main()
{freopen("bounce.in","r",stdin);freopen("bounce.out","w",stdout);int n;cin>>n;int sz=(int)sqrt(n);int t=n/sz;if(n%sz) t++;int now=1;fo(i,1,n){scanf("%d",&a[i]);be[i]=now;if(i%sz==0) now++;}fd(i,n,1){if(i+a[i]>n) nx[i]=n+1,bs[i]=1;else{if(be[i]==be[i+a[i]]) nx[i]=nx[i+a[i]],bs[i]=bs[i+a[i]]+1;else nx[i]=i+a[i],bs[i]=1;}}int q;cin>>q;while(q--){int p;scanf("%d",&p);if(p==1){int x;scanf("%d",&x);x++;int ans=0,pos=x;while(pos<=n)ans+=bs[pos],pos=nx[pos];printf("%d\n",ans);}else{int x,t;scanf("%d %d",&x,&t);x++;a[x]=t;int pos=x;bs[x]=0;while(be[pos]==be[x]) pos=pos+a[pos],bs[x]++;if(pos>n) pos=n+1;nx[x]=pos;fd(i,x-1,1){if(be[i]!=be[i+1]) break;if(be[i]==be[i+a[i]]) nx[i]=nx[i+a[i]],bs[i]=bs[i+a[i]]+1;else nx[i]=i+a[i],bs[i]=1;}}}
}

这篇关于【BZOJ2002】弹飞绵羊的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/279602

相关文章

睡不着觉--安卓计数器给我数绵羊

最近长沙天气有点让人抓狂了,宿舍更是睡觉禁地,大晚上睡不着觉,半夜惊醒,一身IT闷骚汗,嗨,又是难眠夜~_~          睡不着的时候就打开电脑,闲来无事,刚好前几天安卓入门,便突发奇想,弄一个计数器来数绵羊(当然,只是一个计数器,可能需要接入手机的音响端口才能发声吧),哈哈,全当是练习安卓上的线程应用小程序,路人就当看看热闹,大神见笑。         首先介绍一下,如

BZOJ2002 [Hnoi2010]Bounce 弹飞绵羊 解题报告【数据结构】【分块】

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

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

题目大意: 题目链接: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

鼠IgG,兔IgG,绵羊IgG介绍

免疫球蛋白为五类,它们由其重链类型定义:IgG为Cγ; Cμ用于IgM; Cα用于IgA; IgE为Cε,IgD为Cδ。研究发现,兔免疫球蛋白为四类(不含IgD)。IgG抗体(immunoglobulin G)在免疫应答中起着激活补体,中和多种毒素的作用。IgG抗体持续时间长,是唯一能在母亲妊娠期穿过胎盘保护胎儿的抗体。它们还从乳腺分泌进入初乳,使新生儿第一时间得到抗体保护。IgG是四

java画羊_Java游戏-牧羊犬与绵羊

这是一款非常简单的Java游戏,以修正到半截的LGame-Simple-0.2.5开发(也就是LGame-Simple-0.2.5-test版)。 该游戏目前内置有关卡十一关(可配置),以绘制的牧羊犬与绵羊为主要角色,其中牧羊犬将根据玩家鼠标所在位置移动,而绵羊则始终远离牧羊犬,如何利用此一特性,驱赶指定数量绵羊到达指定羊圈中呢?这个,也就是本游戏的游戏目标了。 游戏源码如下: package

【分块】[LUOGU 弹飞绵羊] 分块

题目: 题目链接:[LUOGU 弹飞绵羊] 题解: 这个题就是一个LCT的模板题,但是呢,作为一个菜鸡,LCT,,还是不会的了,那我就好好写分块吧,就好好写分块就好了,,,, 这个题用分块的写法就是比较简单了,开两个数组记录一下就好了,一个是记录这只绵羊跳多少步才能跳出他自己所在的块,再开一个记录一下他跳出去之后跳到了哪个点上就好。这样的话就很好去用分块进行维护了。,, 代码: #inc

易基因|3文聚焦:DNA甲基化在动物育种中的作用研究成果(家蚕+绵羊+肉鸡)

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 多项研究表明,DNA甲基化对动物的生长发育、疾病抗性、繁殖性能起到了重要的调控作用。近年来,DNA甲基化在动物育种领域的研究进展极为迅速。本期我们对3篇DNA甲基化在家蚕、羊和鸡等动物育种领域的研究成果进行解读,并对DNA甲基化在动物育种中的作用研究套路进行总结,一起看看吧。 家蚕育种 标题:Comparat

写给将毕业的你:优秀的绵羊

(PS:女神毕业照镇楼) 常年在网上闲逛的时候,经常看到各种优秀的程序员简历——名牌大学毕业、各种证书、国家奖学金,又有大公司的实习经验。像我这种毕业于二本垫底学校的,还挂过六科的学渣无法想像:他们既然那么优秀,却为什么又那么“差劲”。 这些困惑都在这本书中有了答案,它也让我坚信在可见的未来:教育是不会有公平的一天。 不过这并不是一篇吐槽文,而是Share一下毕业后的那些思考过的问题。

[题解]bzoj2002(HNOI2010)Bounce 弹飞绵羊

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

美国匿名议员:操控一个幼稚绵羊组成的国家太容易了

美国匿名议员:操控一个幼稚绵羊组成的国家太容易了 2016-05-13 23:04:08 来源:观察者网 class="miniseebox js_weixin_iframe" frameborder="0" scrolling="no" src="about:blank" style="width: 232px; height: 0px; position: absolute; left