第五十二次 & 不知道第多少次 五

A

答案很小,可以直接枚举答案。

B

f(i) 表示 i 这条边被多少最小环包含,则答案为 f(i)d,其中 d 为最小环长度。

此时只需要求 f(i)d,对每条边跑一次最短路计数容易得出。

C

Sol 1

依次加入每个数,维护 fi 表示长度为 i 的子序列的最小结尾,考虑转移,

发现加入 xfi1×bi1fi×bi<xfi<xbix 更新不了,xfi1×bi1fi×bifi 转移不到,

只有 fi1×bi1<xfi×bifi 可能被更新,而容易发现 fi×bi 是单调的,二分即可。

Sol 2

依次加入每个数,维护 fi 表示结尾为 i 的子序列的最大长度,考虑转移,

加入 x 时,有 fx=max{fi|x>i×bfi}+1

注意到此处只对每个 i|x>i×bfi 考虑了 x 接上以 i 结尾的最长子序列的情况,而这是对的。

证明:考虑存在某个 i|xi×bfix 可以接上以 i 结尾的,长度 <fi 的某个非最长子序列时,

可以接出一个以 x 结尾的,长度 fi 的子序列,而 x>i,所以这个子序列严格劣于以 i 结尾的,长度为 fi 的最长子序列,所以可以不管。

动态开点线段树维护即可。

D

类似超级钢琴地,定义 (v,x,y,l1,r1,l2,r2) 为一组 i[l1,r1],j[l2,r2],且其中最优者为分数为 v(x,y) 的候选答案。

考虑类似地依次拿出前 k 大,只需要考虑拿出一组候选答案后其怎么分裂。

看起来对于任意 l1,r1,l2,r2 不太容易快速确定 v,x,y,但 [l1,r1]=[l2,r2][l1,r1][l2,r2]= 时容易确定 v,x,y

所以尝试保证当前每一组候选答案都是上面的形式。

对于 [l1,r1]=[l2,r2],将其分裂为 ([l1,x1],[l1,x1])|x>l1,([l1,x1],[x,r])|x>l1,([x,x],[x,x])|xy,([x,x],[x+1,y1])|x<y1,([x,x],[y+1,r])|y<r,([x+1,r],[x+1,r])|x<r

对于 [l1,r1][l2,r2]=,将其分裂为 ([l1,x1],[l2,r2])|x>l1,([x+1,r1],[l2,r2])|x<r1,([l1,r1],[l2,y1])|y>l2,([l1,r1],[y+1,r2])|y<r2

堆维护候选答案即可。

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