像潮落潮涌,送我奔向自由。|

寂静的海底

园龄:3年2个月粉丝:59关注:15

2023-02-06 17:40阅读: 36评论: 0推荐: 0

【题解】P8969 Dream with Dynamic | 线段树 思维

看到这个题的题解都很简略,所以我写详细点。

首先这个 popcount 函数的势能性质是不好分析的,因为 appopcount(a) 不一定大于 popcount(b), 所以只能考虑 popcount 的值域为 O(logV) 的性质,

线段树维护,将操作分为若干线段,接下来如果某个段在某个时刻被求过一次 popcount,后面无论再怎么整段地加,它的值都可以表示成 popcount()+b 的形式,所以我们考虑在线段树上维护标记:

f(popcount(x+a))+b,其中 f(x) 是一个 值域和定义域均为 O(logV) 的函数,这样做的原因如下:

我们把操作序列形象地描述出来,加法是 a,区间做 popcountp,那么操作序列例如

apapppaaapaaa

我们把加法合并成一次再按照 p 分段:

 ap| ap | ap | ap | ap | a

就变成了若干次 popcount(x+b) 的复合,这就是一个值域 O(logV) 的函数,从第二次开始定义域也变成了 O(logV),于是我们直接维护第一步函数的样子,暴力维护第二步开始以及后面函数的复合,单独计算最后的加法就可以做到了。

纯加法需要单独记录,它的值域不同。复合时也需要特判。

时间复杂度 O(qlognlogV) ,可以跑进 4s,做一些卡常性质的处理(如对于区间长度小于 3logV 的区间,再次下传标记是不优秀的,不如暴力)即可跑进 2s,目前最优解第二。

posted @   寂静的海底  阅读(36)  评论(0编辑  收藏  举报
历史上的今天:
2022-02-06 atcoder近期比赛记录
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起