第五十六次

A

有解的话往直径端点走一定是一组解。

B

手玩一下,可以发现,令 pax,对 i(x,y) 依次执行:

  • pandai0,令 pporai

之后,若 panday0,则可达。

进一步地,令 p 分别取 ax 二进制下每一位,得到的结果之 or 与原结果相同。

也就是说,只需要知道 p 分解出的若干 2k 通过 (x,y) 得到的结果,简化了问题。

在线段树的每个节点上维护 ck 表示 2k 通过该节点的结果,这样将 p 分解就可以知道 p 通过该节点的结果。

p 依次通过 (x,y) 分解出的每个节点,就可以知道 p 通过 (x,y) 的结果了。

C

按最后一次被打的时间、最后一次被打后是否空血把陨石划分成若干颜色段 (l,r,t,0/1)

其中每个陨石均在 t 时最后一次被打,且最后一次被打后均是 / 否空血。

注意到 (l,r,t,1),l=r,所以可以额外维护出 cl 表示这个陨石最后一次被打后剩多少血。

考虑一只恐龙会让这些颜色段发生什么变化。让它从左往右依次通过每个颜色段:

  • 若当前颜色段形如 (l,r,t,1),直接根据记录下的 cl 计算恐龙和这块陨石的血量变化即可。

  • 若当前颜色段形如 (l,r,t,0),考虑恐龙能不能走完这个颜色段。
    如果能走完,那这些陨石最后一次被打的时间被更新为当前时间,且均被打成空血。
    否则二分出恐龙能走到的位置 k,则 [l,k1] 的陨石同上,k 陨石形成颜色段 (k,k,t,1)[k+1,r] 的陨石不受影响。

现在问题变为给定 l,r,t,T,h,判断 [l,r] 的陨石在 t 时最后一次被打成空血后,T 时到 lh 血的恐龙能否通过 [l,r] 这些陨石,

也就是判断 i=lrmin{ri(Tt),ci} 是否小于 h

定义 fi(x)=min{rix,ci}={rixxciricix>ciri,问题变为求 i=lrfi(Tt)

Δ=Tt,设 fi(Δ)=aiΔ+bi(具体地,ai={rixciri0x>ciribi={0xciricix>ciri),

i=lrfi(Δ)=i=lraiΔ+bi=Δi=lrai+i=lrbi,只需求出代入 Δ 时的 i=lraii=lrbi

vi,j,0/1 表示代入 i 时的 aj,bj,可以发现序列 vi 只是在序列 vi1 的基础上修改了所有 i=cjrj+1j 位置,于是可以主席树维护 v

这样 i=lrai=i=lrvΔ,i,0,i=lrbi=i=lrvΔ,i,1,在 v 上查区间和即可。

D

啥玩意,看不懂啊。

posted @   Jijidawang  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示