zoukankan      html  css  js  c++  java
  • 带修莫队学习笔记

    序言

    写的有点草率,算是给自己加深一下印象吧 ...

    (~)

    带修莫队

    考虑到莫队是 按询问排序 ,而修改操作是死死地 按时间轴进行 的,固然不能将 询问修改 一视同仁。

    我们仔细想想 " 修改操作按时间轴进行 " 这句话。

    我们是不是可以在普通莫队的基础上,强行加上一个时间因素呢?

    视每个询问操作为一个三元组 ((l,r,t)) :经过前 (t) 次修改后,询问区间 ([l,r]) ... (询问的东东)。

    我们发现 ((l,r,t))(t) 这一维,也可以像 (l,r) 这些维一样扩展,使 ((l,r,t)) 扩展一步,一共有六种扩展方式:

    • ((l,r,t)->(l-1,r,t))
    • ((l,r,t)->(l+1,r,t))
    • ((l,r,t)->(l,r-1,t))
    • ((l,r,t)->(l,r+1,t))
    • ((l,r,t)->(l,r,t-1))
    • ((l,r,t)->(l,r,t+1))

    对于 (t) 这一维的扩展,每次扩展,我们都要考虑操作的贡献:若是 (t) 变大了,则需要加上新操作对答案的贡献;若 (t) 变小了,则需要考虑扣除旧操作对答案的贡献。

    (t) 变大为例,具体的,若当前修改操作对应的修改点为 (x) ,修改值为 (v)

    (l leq x leq r) ,则表示 (x) 点原先的值 (A_x) 对答案有过贡献,需要先扣除 (A_x) 对答案的贡献,然后再考虑加上 (v) 对答案的贡献;否则表示 (x) 点原先的值对答案没有贡献,直接在序列上修改一下 (A_x) 即可。转移同样是 (mathcal{O(1)})

    (t) 变小同理。

    带修莫队的分块方式是以 (n^{frac{2}{3}}) 为一块,分成了 (n^{frac{1}{3}}) 个块。

    三元组 ((l,r,t)) 排序的第一关键字为 " (l) 所在的块 ",第二关键字为 " (r) 所在的块 ",第三关键字为 " (t) " 。

    时间复杂度 (mathcal{O(n^{frac{5}{3}})})

    证明咕咕咕 ...

    【模板】带修莫队

    (~)

    结语

    写的真的很草率,神仙不要 D 我 qwq 。

  • 相关阅读:
    Spring---------ThreadLocal(线程变量副本)
    Spring----Spring的IoC容器
    Spring----IoC Service Provieder
    三种依赖注入的方式
    数据库并发操作可能出现的问题之---更新丢失
    有状态bean与无状态bean
    Spring Data JPA、 MyBatis与Hibernate简单对比
    spring-bean的生命周期
    TCP/IP详解--拥塞控制 & 慢开始、拥塞避免、快重传和快恢复。
    如何在云服务器创建maven私有仓库
  • 原文地址:https://www.cnblogs.com/cjtcalc/p/12381335.html
Copyright © 2011-2022 走看看