zoukankan      html  css  js  c++  java
  • 「科技」区间众数

    序列长(n),询问(Q)

    离线

    莫队呀,由于众数不好删除,直接回滚莫队即可,时间复杂度(o(n sqrt n)),空间$o(n) $。

    在线

    分块啊。

    设块大小为T。

    first

    其实可以沿用回滚莫队思想,记录([l,r])块里的数的(cnt),时间复杂度(displaystyle o({n^3 over T^2}+ TQ)),空间复杂度(displaystyle o({n^3 over T^2}))。T取(n^{2 over 3})最优。

    second

    略微优化,实际上询问时对于([l,r])的块里数只需知道众数,然后对于边角上的数知道在询问区间出现次数即可。

    预处理([l,r])块的众数,时间复杂度$o(n sqrt n) $。

    询问一个数在区间出现次数 可以记录前缀和,总时空复杂度均为(o(n sqrt n)),也可以用vector存同类数出现位置,在vector上二分,时间复杂度(o(n sqrt {nlog(n)})),空间复杂度(o(n))

    third

    序列中每个数记录在vector里出现的位置(X)

    当前的答案为ANS,

    对于左端边角,若vector中下标ANS+X的位置 (leq r),那么++ANS。

    对于右端边角,若vector中下标ANS-X的位置 (geq l),那么++ANS。

    显然,ANS最多只会被增加(2 sqrt n)次(ANS基于中间所有的整块的众数,最多只会多上 边角的数的数目)。

    时间复杂度(o(n sqrt n)),空间复杂度(o(n))

    好像还有更好的科技...不会。

    例:

    「Violet」蒲公英

    「Ynoi2019模拟赛」Yuno loves sqrt technology III

  • 相关阅读:
    单(single)
    cdq分治
    寿司
    qtth
    二分,倍增的一些思考(lost my music:可持久化栈)
    手写堆、哈希表
    保留字,关键字
    测试19,20,21
    要买的书
    测试18:T2:可爱精灵宝贝
  • 原文地址:https://www.cnblogs.com/klauralee/p/10856027.html
Copyright © 2011-2022 走看看