博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【codevs2333】&【BZOJ2002】弹飞绵羊[HNOI2010](分块)
阅读量:6229 次
发布时间:2019-06-21

本文共 898 字,大约阅读时间需要 2 分钟。

  我其实是在codevs上看到它的题号后才去做这道题的。。。2333。。。

  题目传送门:codevs:/  bzoj:

  题意已经说的很清晰了,蓝鹅……我不会做。

  看题解有两种写法:分块和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[0..200010]of longint;  n,m,i,j,k,p,t,q,ans:longint;begin  read(n); p:=trunc(sqrt(n));  for i:=0 to n-1 do begin    read(a[i]); ne[i]:=(i div p+1)*p;  end;  for i:=0 to n-1 do begin    x[i]:=i; y[i]:=0;    while(x[i]
=ne[j] then begin x[j]:=j+a[j]; y[j]:=1; end else begin x[j]:=x[j+a[j]]; y[j]:=y[j+a[j]]+1; end; end; end;end.
弹飞绵羊

   lct等学了再补吧。。。

转载于:https://www.cnblogs.com/quzhizhou/p/6756655.html

你可能感兴趣的文章
阿里云王坚:运营才能缔造真正的云计算
查看>>
远程数据库的表超过20个索引的影响
查看>>
__attribute__ ((packed)) 的作用
查看>>
【Django】CentOS7安装Django笔记
查看>>
《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.71. 再次清理无用内容...
查看>>
趋势科技CEO陈怡桦:敌人是谁?
查看>>
zabbix漏洞利用 Zabbix Server远程代码执行漏洞CVE-2017-2824 2.4.X均受影响
查看>>
带项目体会 合格的Leader 应该具备什么特质?
查看>>
Black Hat|黑客演示如何向卫星网络发送篡改信号
查看>>
揭秘中国数据库研究鲜为人知的那些事
查看>>
新年伊始你需要做的10个管理任务
查看>>
【安全课堂】七种武器把黑客拒之门外
查看>>
LaCie Mirror:科技与设计的交融
查看>>
很有意思,如何把代码看成一个犯罪现场
查看>>
10G光纤来了,收发器和线缆的变化有哪些?
查看>>
Java 9的JDK中值得期待的:不仅是模块化
查看>>
协鑫光伏:提升良品率的一小步是“中国智造”的一大步
查看>>
IoT大潮来袭 车联网行业准备好了吗?
查看>>
时空穿梭 探寻高端存储架构的前世今生
查看>>
中国企业应用数据分析大概情况和未来趋势
查看>>