Examples

P8332 [ZJOI2022] 面条 解题报告

P8332 [ZJOI2022] 面条 解题报告:

更好的阅读体验

题意

定义序列 a 上的一次操作为:

1inbiai+ani+11inaibi22

给定序列 a 以及一个位置 xq 次询问,每次求 a 应用 ki 次操作后,ax 的值是多少。

分析

巨大厉害题,搬运一下官方题解!

可能写的有点口胡,补完代码之后来补充一下。

将最后答案除以 2k,那么我们第二个操作就不需要要除二了。

我们手玩一下操作过程:

abcdefghzaabbccddzz(a×2w)(b×2w)(z×2w)(a×2t+1)(b×2t+1)(z×2t)

(其中一个字母在不同阶段不代表相同数字)

也就是说,令 tn 最低非零位,那么我们应用 t+1 次操作后,会变成很多个长度为 2t+1 的相同段,最后接一个长度为 2t 的相同段。

显然这个过程的操作与询问都可以在 O(nlogn) 内暴力模拟。

将长度为 2t 的相同段缩成一个字母,令新的序列为 c1,c2,cm。考察接下来的操作造成的影响:

c1,c2,,cmc1+cm,c1+cm1,c2+cm1,c2+cm2,

令差分数组为 d,那么操作就为:

d1,d2,,dm1dm1,d1,dm2,

那么,一次操作就是 d1,d2,dm1,d1,d2,,dm1 的一次置换,令这个置换为 g,我们询问的答案就是:

C+i=1m1[gk(i)<x]di=C+i=1x1dgk(i)

C 可以简单计算出,后面这个式子考虑拆出所有置换环,每个置换环(设大小为 c)通过一次卷积求出所有 k[0,c) 的答案。

将大小相同的置换环的答案加到一起,每次询问只需要枚举 O(n) 个置换环将答案加起来即可,复杂度 O(nlogn+qn),不能通过。

继续挖掘这个置换 g 的性质(g1g 性质相同),手玩可以发现所有置换环大小都是 22(m1) 下的阶 r 的因数。

也就是答案关于 r 是循环的,那么我们将大小相同的置换环加和之后,直接维护 k[0,r) 的答案就好了。

复杂度 O(nd(n)+q),可以通过。

posted @   xiaoziyao  阅读(154)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示