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。
题解
这是一道经典的LCT(动态树)例题,然而,我这个蒟蒻,并不会用动态树,我只会分块这种相对低级的方法。
将原序列分成 n√ {\sqrt n} 块, ei e_i表示当前 i i跳出ii所在的那一块需要的步数, eni en_i表示跳出块后的位置。
执行询问操作时,只需要不断地跳出下一个块,跳到不能再跳为止,最多跳 n√ {\sqrt n} 次。具体实现如下:
ans:=0;while op<=n dobeginans:=ans+e[op];op:=en[op];end;
执行修改操作时,只需修改本块中在该数之前的 ei e_i和 eni en_i,从前往后修改,最多修改 n√ {\sqrt n} 次。具体实现如下:
for o:=op downto l do //l为op所在块中的左边界beginif o+k[o]>r then //r为op所在块中的右边界beginen[o]:=u;e[o]:=1;endelsebeginen[o]:=en[u];e[o]:=e[u]+1;end;end;
初始化的方法跟在执行修改操作时的更新方法差不多,就不多讲了。
总时间复杂度 O O(mm n√ {\sqrt n} ),分块算法,奥妙重重!
Code(Pascal)
vark,en,ne:array[0..300000] of longint;ku,l,r,i,j,m,n,o,p,u,op,ans:longint;
function min(a,b:Longint):longint;beginif a<b then exit(a)else exit(b);end;
beginreadln(n);for i:=1 to n doread(k[i]);ku:=trunc(sqrt(n));p:=n div ku;if n mod p<>0 then inc(ku);for i:=1 to ku dobeginl:=(i-1)*p+1;r:=min(i*p,n);for o:=r downto l dobeginu:=o+k[o];if u>r thenbeginen[o]:=u;ne[o]:=1;endelsebeginen[o]:=en[u];ne[o]:=ne[u]+1;end;end;end;readln(m);for i:=1 to m dobeginread(op);if op=1 thenbeginreadln(op);inc(op);ans:=0;while op<=n dobeginans:=ans+ne[op];op:=en[op];end;writeln(ans);endelsebeginreadln(op,u);inc(op);k[op]:=u;l:=(op div p)*p+1;r:=l+p-1;if op mod p=0 thenbeginl:=l-p;r:=r-p;end;for o:=op downto l dobeginu:=o+k[o];if u>r thenbeginen[o]:=u;ne[o]:=1;endelsebeginen[o]:=en[u];ne[o]:=ne[u]+1;end;end;end;end;
end.
BZOJ 2002 Bounce 弹飞绵羊 [Hnoi2010]相关推荐
- bzoj 2002 Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊 时间限制: 10 Sec 内存限制: 259 MB 提交: 16133 解决: 8253 题目描述 某天,Lostmonkey发明了一种 ...
- BZOJ 2002 Bounce 弹飞绵羊 [分块]
本身是一道lct裸题,为了证明分块的优越性,可用性,强行写了一波不擅长的分块...GG 分块思路很优秀,每个点记录跳出分块的步数以及跳到下一分块的哪个点 #include<cmath> # ...
- 【bzoj 2002】弹飞绵羊
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 10761 Solved: 5542 [Su ...
- 2002: [Hnoi2010]Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊 https://www.lydsy.com/JudgeOnline/problem.php?id=2002 分析: 绵羊在弹飞的路径中相当于一棵 ...
- AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203
[HNOI2010]BOUNCE 弹飞绵羊 思路: SBlct: 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- HYSBZ - 2002 :Bounce 弹飞绵羊 (分块算法)
Bounce 弹飞绵羊 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- Bounce 弹飞绵羊
某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当 ...
- [BZOJ 2002][Hnoi2010]Bounce 弹飞绵羊(分块)
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
最新文章
- 即将到来的金三银四,这10道springboot常见面试题你需要了解下
- mysql 1449 : The user specified as a definer ('root'@'%') does not exist
- MySQL数据表基本操作
- 从互联网的旁观者,转为互联网的建设者,推动者!!!
- cigarettes(香烟)
- matlab中waitbar用法,matlab中waitbar
- SQL Server 数据库操作类
- 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——B题 小宝的幸运数组
- mui打包ios_优品视界,聚合影视APP源码。mui框架,hbuilder即可编译,云打包生成ios的Android的app...
- mongodb 集群shard_MongoDB 分片集群环境搭建
- iPhone Xs和iPhoneXs max 的区别 哪个好
- 微信扫码下载APP,苹果,安卓多码合一,微信下载pdf报告,文件解决方案
- 【JoJo的摄影笔记】黎明女神的呼唤—— 佳能王朝霸业崛起
- redis之瘦小精干的位图 (一)
- 猿辅导国奖选手妈妈在线分享教育经:数学新生代的成长之路
- 王者苹果服务器转安卓系统,王者荣耀苹果用户可以转?王者荣耀苹果用户转安卓的方法教程...
- 等额本金和等额本息房贷公式推导
- 国产飞腾服务器制作raid
- CefSharp的ChromiumWebBrowser截出来的图片是空白
- 运用OpenCV对图像进行红眼校正
热门文章
- 苹果笔记本怎么安装python_苹果系统MAC下如何安装Python解释器
- [转]AIR中调用exe或者bat可执行文件
- vue拖拽组件(app移动端)
- 制造工程与技术(机加工)
- Http- Post/Get请求参数值最大限制问题
- 开车人千金难买的知识!(组图)
- 「老板娘」马东敏回归百度的880天
- C# 读取EXCEL数据丢失,6万行数据只能读取13866行
- 第1.5章:StarRocks部署--集群部署
- __attribute__((packed)) C