zoukankan      html  css  js  c++  java
  • 莫队算法

    网上百度了一发,这个算法是一个叫莫涛的大牛研究出来的 Orz~   看了一些牛牛们的博客,也大概理解了这个算法。

    先说这个算法的作用吧:

    莫队算法能够在O(n^1.5)的复杂度内求出区间[L,R]中某一个数字出现的次数。但是操作是离线的,因为这个算法的就是根据这个性质来的。

    如果我们已经知道了区间[L,R]的数字的出现次数,就能够在O(1)的时间内得到[L,R+1],[L,R-1],[L+1,R],[L-1,R]因为只需要判断相邻的那个数字即可。

    现在我们有长度为n的数组,将它分成sqrt(n)部分,对m次查询排序,根据左边界所在的块排序,然后再根据右边界排序。

    如果i 与 i + 1两个查询在同一个块内,那么我们只需要让r增加,由于块内长度为sqrt(n) 所以复杂度O(n^1.5);

    如果i 与 i + 1正好跨越一块,那么r最多变化sqrt(n),所以复杂度还是O(n^1.5);

    所以总复杂度为O(n^1.5);

  • 相关阅读:
    centos-docker安装及基本使用
    List集合-03.Vector
    List集合-02.LinkedList
    List集合-01.ArrayList
    常用图像处理方法
    git使用
    bug记录
    bash vim等常用命令
    python常用
    MTCNN试用
  • 原文地址:https://www.cnblogs.com/sweat123/p/5671607.html
Copyright © 2011-2022 走看看