zoukankan      html  css  js  c++  java
  • 【bzoj1878】[SDOI2009]HH的项链

    考虑非莫队的离线算法。。

    若[l,r]中有重复数值很麻烦,考虑取一个数为代表(最左或最右)

    1.最左:用BIT,先把所有第一个出现的数扔进去,将询问左端点升序,每次都可能产生历史的无用点,并出现新的“第1次出现点”,只需将其加入BIT即可。

    2.最右,做法类似

    当然有在线做法了(copy),

    考虑区间查询l~r之间的颜色种数,其实就是求所有满足(l<=i<=r,next[i]>r)的个数,因为如果某个点的next已近超出了这个区间的范围,就说明这个点对答案产生贡献了。

    这个时候问题就已近被转化为给定一个序列,求区间l~r之间权值大于r的个数。

    那么我们对于每个点都在可持久化的权值线段树中构造一条新的线段树链就好了,查询就是常规的权值线段树的查询。

    对于每个点都要新建一条最多Log2 N个点的链,空间复杂度N log2 N;对于每次询问最多递归深度为Log2 N层,时间复杂度M Log2 N。

  • 相关阅读:
    C#-项目属性设置
    SQL--连接字符串总结
    希尔排序实现(不太满意)
    选择排序实现
    用位运算实现 | 与 ^ 的功能
    如何初始化一个定长List<T>
    线程池与Threadlocal
    常用类
    基本数据类型介绍
    eclipse快捷键
  • 原文地址:https://www.cnblogs.com/supy/p/6940180.html
Copyright © 2011-2022 走看看