zoukankan      html  css  js  c++  java
  • CF163E e-Government

    CF163E e-Government(AC 自动机+ BIT + dfn 序 + LCA + 序列上差分)

    这么多东西搞在一起其实也没有很难。。

    其实我们可以发现,题目就是让我们求每一个串作为某个串的子串出现次数之和。(好像更难理解了。)

    看一下样例就知道了..

    input:
    1 3
    a
    aa
    ab
    ?aaab
    
    output:
    6
    

    (6=3+2+1) ,题意就是这个。

    好,那对应到 AC 自动机上面去,就是相当于询问一个串的每个前缀对应节点,Fail 树中从这个点到根节点路径上的 (Endpos) 标记之和。

    同时还带修,支持把某个点的 (Endpos) 标记减一和加一。

    暴力做当然是可以的,直接树剖或者 LCT 对着链上和一顿操作即可,但是这样做很麻烦(AC 自动机套个 LCT 就显得很烦了。。虽然码量也不算特别大。)

    那么根据树上差分的思想,其实我们可以把原题从:

    单点修改,链上查询。

    变成:子树区间修改,单点查询。

    然后我们再利用序列差分变成:单点修改,子树区间查询。

    具体来说就是利用序列差分,先打一下 dfn 序,然后树状数组维护这两个操作即可。

    Ex(延伸)

    总的来说,这道题厉害的是那个题意的转化,也就是相当于反其道而行,其实我们这里的变化(尤其是从第一步到第二步),就是一个查询和修改的变换,有时候查询好统计,修改不好改,有时候修改方便,查询却又不利,这个时候我们就要学会变通。

    再比如,一道题修改某些东西,我们会先考虑怎么去维护这个修改,但实际上我们也可以考虑每次修改对答案的影响。

    所以,我们要做到的就是平衡,想问题要角度多一些。

  • 相关阅读:
    druid连接池的配置和应用
    Maven的Unknow错误
    实践——WebStorm安装(2021/01/30)(更新2021/07/14,添加激活码和习惯设置)
    vue3如何编写挂载DOM的插件
    npm 安装源
    一个node项目的docker镜像制作
    圣女
    基于计算机视觉的车牌识别系统(一)
    vue3 兄弟组件传参mitt
    laravel-admin 加载样式失败
  • 原文地址:https://www.cnblogs.com/Akmaey/p/14678507.html
Copyright © 2011-2022 走看看