【codevs2333】&【BZOJ2002】弹飞绵羊[HNOI2010](分块)
我其实是在codevs上看到它的题号后才去做这道题的。。。2333。。。
题目传送门:codevs:http://codevs.cn/problem/2333/ bzoj:http://www.lydsy.com/JudgeOnline/problem.php?id=2002
题意已经说的很清晰了,蓝鹅……我不会做。
看题解有两种写法:分块和link-cut tree。但是lct我不会,只能用分块了。
但是怎么分块呢?
我们想一下有什么暴力写法。一种是记录每个反弹装置能往后弹多长距离,这样效率是修改O(1)+查询O(n)。另一种是记录从每个反弹装置开始到被弹飞要被弹多少次,这样效率是修改O(n)+查询O(1)。我们可以想一个介于两者之间的做法,比如……把序列平均分成m块,记录每个反弹装置弹到下一个块要弹多少次 和 会弹到下一个块的哪一个装置。这样一来,效率就变成了修改O(n/m)+查询O(m),总时间复杂度就是O(n*(n/m+m))。显然,如果要使效率最快m就取√n。
接下来就可以打代码+AC了。(代码真心很短)
代码:
var a,ne,x,y:array[..]of longint;
n,m,i,j,k,p,t,q,ans:longint;
begin
read(n); p:=trunc(sqrt(n));
for i:= to n- do begin
read(a[i]); ne[i]:=(i div p+)*p;
end;
for i:= to n- do begin
x[i]:=i; y[i]:=;
while(x[i]<ne[i])and(x[i]<n)do begin
x[i]:=x[i]+a[x[i]]; inc(y[i]);
end;
end;
read(m);
for i:= to m do begin
read(q);
if q= then begin
read(k); ans:=;
while k<n do begin
ans:=ans+y[k]; k:=x[k];
end;
writeln(ans);
end
else begin
read(k,t); a[k]:=t;
for j:=ne[k]- downto ne[k]-p do
if j+a[j]>=ne[j] then begin
x[j]:=j+a[j]; y[j]:=;
end
else begin
x[j]:=x[j+a[j]]; y[j]:=y[j+a[j]]+;
end;
end;
end;
end.
弹飞绵羊
lct等学了再补吧。。。
【codevs2333】&【BZOJ2002】弹飞绵羊[HNOI2010](分块)的更多相关文章
- BZOJ-2002 弹飞绵羊 Link-Cut-Tree (分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 6801 Solved: 3573 [Submi ...
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 【分块】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2002 2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 ...
- 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 时间限制: 10 Sec 内存限制: 259 MB 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他 ...
- BZOJ 2002:Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 14944 Solved: 7598 [Su ...
- BZOJ 2002 弹飞绵羊(分块)
题目:弹飞绵羊 这道题,据说是lct裸题,但是lct那么高级的数据结构,我并不会,所以采取了学长讲过的分块做法,我们对序列分块,可以定义两个数组,其中一个表示从当前位置跳出当前块需要多少步,另一个数组 ...
- bzoj 2002 Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 11202 Solved: 5698[Subm ...
- c++之路进阶——codevs2333(弹飞绵羊)
2333 弹飞绵羊 2010年省队选拔赛湖南 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description Lostmonk ...
- bzoj2002 [Hnoi2010]Bounce 弹飞绵羊【分块】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2002 这一题除了LCT解法,还有一种更巧妙,代码量更少的解法,就是分块.先想,如果仅仅记录每 ...
- BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊:分块
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2002 题意: 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆 ...
随机推荐
- Oracle SQL*Loader 数据导入工具
SQL*Loader是一个向Orale大量倒数据的工具,可以从界定文件中导入数据如用 , 界定的,可以从定宽的文件导入数据,
- Android自动化测试工具之—UiAutomator环境配置
1.相关软件下载: 1)JDK: 1.6及其以上版本 2)Eclipse 3)Android SDK 其中Eclipse和Android SDK已经被Google打包成ADT(Android Deve ...
- 爬虫实战【5】送福利!Python获取妹子图上的内容
[插入图片,妹子图首页] 哈,只敢放到这个地步了. 今天给直男们送点福利,通过今天的代码,可以把你的硬盘装的满满的~ 下面就开始咯! 第一步:如何获取一张图片 假如我们知道某张图片的url,如何获取到 ...
- 使用mybatis向oracle数据库插入数据异常
遇到了使用mybatis向oracle数据库插入数据异常的问题, 具体的报错如下:org.springframework.jdbc.UncategorizedSQLException: ### Err ...
- MySQL复制(三):常见的复制任务
复制案例:包括横向扩展.热备 报表 企业需要挖掘有价值的报表信息,使用SLAVE,可以避免干扰到master的复制. 通过binlog获取某个时间范围的所有事件 $ mysqlbinlog --for ...
- document write & close
在载入页面后,浏览器输出流自动关闭.在此之后,任何一个对当前页面进行操作的document.write()方法将打开—个新的输出流,它将清除当前页面内容. 必须确保调用document.close() ...
- Linux中的判断式
格式一:test [参数] 判断内容格式二:[ [参数] 判断内容 ] 说明: a.格式二可以认为是格式一的缩写 b.格式二里中括号和内容之间要有空格 基于文件的判断-d 判断文件是否存在,并且是目录 ...
- 1.2 使用电脑测试MC20模块的GPS功能测试
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- GPS USB驱动串口被占用
1.一般是装了错误的驱动,显示如下 2.实际装好应该是显示的 3.驱动选择,先卸载了上面的virtual驱动,安装下面箭头指向的驱动 这里的卸载很重要,先点设备管理器的--查看--显示隐藏设备, 然后 ...
- 通过js代码来制作数据库增删改查插件
代码流程 1.订制表头:table_config 2.订制显示内容: table_config,data_list 3.加载框: 图片,position:fixed 4.-字符串格式化 ...