当前位置: 首页 > 工具软件 > Haruna > 使用案例 >

bzoj4129 Haruna's Breakfast

潘英豪
2023-12-01

题目描述

Haruna每天都会给提督做早餐! 这天她发现早饭的食材被调皮的Shimakaze放到了一棵
树上,每个结点都有一样食材,Shimakaze要考验一下她。

每个食材都有一个美味度,Shimakaze会进行两种操作:

1、修改某个结点的食材的美味度;
2、对于某条链,询问这条链的美味度集合中,最小的未出现的自然数是多少。即 mex \text{mex} mex 值。

请你帮帮Haruna吧。

题解

这里补一下带修莫队和树上莫队的坑。

如果这题放在序列上的话,即求一段区间的 mex \text{mex} mex 值的话,那就可以带修莫队+对数字分块即可做到 O ( n 5 3 ) O(n^{\frac{5}{3}}) O(n35) 。于是补一下带修莫队。

带修莫队就是具有单点修改和区间询问的莫队,具体来说就是将询问设有三个关键字: l l l 所在的块, r r r 所在的块,上一个修改的时间点,按照这个顺序来排序。然后每次询问的时候再维护 p p p 指针表示进行了几个修改操作即可。简略证明一下复杂度:设块的大小为 B B B ,修改次数为 c c c ,询问次数为 q q q ,则对于 p p p 指针来说,最坏移动 O ( c n 2 B 2 ) O(\frac{cn^2}{B^2}) O(B2cn2) 次,对于 l l l 指针来说,最坏移动 O ( q B ) O(qB) O(qB)(怎么感觉在写物理) ,对于 r r r 指针来说,最坏移动 O ( q B + n 2 B ) O(qB+\frac{n^2}{B}) O(qB+Bn2) ,每次修改都是 O ( 1 ) O(1) O(1) ,于是复杂度为 O ( c n 2 B 2 + q B + n 2 B ) O(\frac{cn^2}{B^2}+qB+\frac{n^2}{B}) O(B2cn2+qB+Bn2) 。一般题目不会说 c , q c,q c,q 大小姑且当做 m m m ,然后一般 n = m n=m n=m ,于是为 O ( n 3 B 2 + n B + n 2 B ) O(\frac{n^3}{B^2}+nB+\frac{n^2}{B}) O(B2n3+nB+Bn2) ,当 B B B n 2 3 n^{\frac{2}{3}} n32 时最优为 O ( n 5 3 ) O(n^{\frac{5}{3}}) O(n35)

所以我们不妨考虑一下怎么在树上莫队。

如何把一个序列表示成一棵树呢? dfs \text{dfs} dfs 序?no,这里是一种特殊的欧拉序,它是当访问到一个点的时候加入序列中,当它的子树都访问完的时候再加一次,所以这个序列总共有 2 n 2n 2n 个点(即树上每个节点都会被加入两次)。然后我们设 s t [ x ] , e d [ x ] st[x],ed[x] st[x],ed[x] 表示 x x x 的初始和结束两个位置。

对于询问 x , y x,y x,y ,设 s t [ x ] < s t [ y ] st[x]<st[y] st[x]<st[y] ,于是我们分讨一下:

1.若 x x x y y y 的祖先,那对于 [ s t [ x ] , s t [ y ] ] [st[x],st[y]] [st[x],st[y]] 这段区间来说,只有 ( x , y ) (x,y) (x,y) 这条链上的点会被加入一次,剩下的点都会被加入两次,所以我们只要维护一次的点即可。
2.若 x x x 不是 y y y 的祖先,则 e d [ x ] < s t [ y ] ed[x]<st[y] ed[x]<st[y] ,那对于 [ e d [ x ] , s t [ y ] ] [ed[x],st[y]] [ed[x],st[y]] 这段区间来说, ( x , y ) (x,y) (x,y) 这条链上只有 l c a lca lca 没有被加入,剩下的点都被加入一次,其它点都被加入两次,所以特判一下 l c a lca lca 即可。

这样就完成了树上莫队啦!效率为 O ( n 5 3 ) O(n^{\frac{5}{3}}) O(n35)

代码正在码中,反正bzoj挂了(其实我想先交上作业)

 类似资料:

相关阅读

相关文章

相关问答