zoukankan      html  css  js  c++  java
  • bzoj4129 Haruna's Breakfast

    题目描述

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

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

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

    请你帮帮`Haruna`吧。

    题解

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    蜘蛛禁止访问文件
    基于PhalApi的Smarty拓展 (视图层的应用)
    MySQL数据库存表情
    查看PHP版本等相关信息
    读取数据库表信息
    nginx简介
    Redis发布订阅
    Redis持久化
    Redis主从复制
    Redis的Java客户端Jedis
  • 原文地址:https://www.cnblogs.com/xjqxjq/p/12411678.html
Copyright © 2011-2022 走看看