• 类似静态区间逆序对的题的一些做法


    lxl说能发了,那就发吧

    bzoj3289 / bzoj3744

    离线做法

    我会莫队!拓展的时候用数据结构(树状数组)维护!O(nsqrt(n)logn)

    我们考虑拓展的时候不插入,直接询问当前区间的贡献。

    我们就是要静态支持区间查询<=x的有几个。

    考虑这种问题一般怎么做,我们对值域分块,<=x就变成了一个块前缀和一个块内前缀。

    我们有两种做法,第一种是我们先跑一遍莫队,找到我们需要哪些询问。

    然后我们差分一下,变成询问前a个数<=x的有几个,我们直接把这些询问离线存下来值域分块一下,扫一遍搞完了。O(nsqrt(n))

    还有一种做法是直接把值域分块可持久化,只要每次把修改的块拷一遍存下块下标就好了。这种做法可能会快一点,但是空间可能有点爆炸(O(nsqrt(n)))。

    在线做法

    我们考虑分块!

    除去边界以外,一个询问在分块的眼中是这样的:

    零散|整块|整块|整块|整块|整块|整块|整块|整块|整块|零散

    我们来一块一块解决。

    块内的逆序对:预处理

    块间的逆序对:每块排序完归并

    两块零散的逆序对:把这两块零散归并

    零散到整块的逆序对:维护值域前缀和

    零散内的逆序对:注意到零散的开头或结尾一定是块端点,预处理即可

    那么边界就是询问端点在同一块的,假设是[l,r],块开头为w,那么[l,r]的答案=[w,r]的答案-[w,l-1]的答案-[w,l-1]对[l,r]的贡献,继续归并即可

    O(nsqrt(n))

    目前这个做法在3744上最快。

  • 相关阅读:
    gulp的使用
    Js中call(),apply()的使用
    HTML中<meta>标签的使用
    字符串及数组常用方法
    css—transform
    《Java设计模式》——适配器模式
    全文检索工具包Lucene以及企业及应用Solr的学习(二)—— solr中edismax用到的Query Function以及java扩展
    全文检索工具包Lucene以及企业及应用Solr的学习(一)
    最近发现服务器发生了一些问题
    TxT读取写入
  • 原文地址:https://www.cnblogs.com/zzqsblog/p/7522528.html
Copyright © 2020-2023  润新知