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);

  • 相关阅读:
    树的重心备忘
    Hdu 2196
    HDU 1520
    TOJ1068 商务旅行
    携程HDU第一场1001
    USACO 4.3.2 The Primes
    Html常用标签的应用
    Html
    开班心得
    for循环练习及字符串处理
  • 原文地址:https://www.cnblogs.com/sweat123/p/5671607.html
Copyright © 2011-2022 走看看