莫队算法可以一个可高效解决绝大多数离线+无修改+区间查询问题的算法。这类问题具体是指:如果知道[L,R]的答案时,可以在O(g(n))的时间下得到[L,R−1],[L,R+1],[L−1,R],[L+1,R]的答案的话,就可以O(nn⋅g(n))O(n\sqrt n · \mathrm{g}(n))O(nn​⋅g(n))的时间内求出所有查询。

假设我们算完[L,R]的答案后现在要算[L′,R′]的答案。由于可以在O(1)的时间下得到[L,R−1],[L,R+1],[L−1,R],[L+1,R]的答案,所以计算[L′,R′]的答案耗时|L−L′|+|R−R′|。如果把询问[L,R]看做平面上的点a(L,R),询问[L′,R′]看做点b(L′,R′)的话,那么时间开销就为两点的曼哈顿距离。

具体实现
我们先对序列分块,每块长度为sqrt(n),然后以询问左端点所在的块为第一关键字,右端点的大小为第二关键字进行排序
然后每个区间由它的上一个区间推出来,虽然单次询问仍可能是O(n),
但是在块中每次询问l的移动最大为sqrt(n),r的移动总和最大为n,块与块之间的移动最大为n
所以总复杂度为O((n+m)sqrt(n))

我这里给出莫队的模板,

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 50010
#define LL long long
using namespace std;
int n, m, k, unit;
struct Mo
{int l;int r;int id;int pos;bool operator<(const Mo &rhs) const{if (pos == rhs.pos)return r < rhs.r;elsereturn l < rhs.l;}
} a[N];
int b[N], cnt[N];
LL Ans[N];
int main()
{scanf("%d%d%d", &n, &m, &k);unit = sqrt(n + 1);for (int i = 1; i <= n; i++)scanf("%d", &b[i]);for (int i = 1; i <= m; i++){scanf("%d%d", &a[i].l, &a[i].r);a[i].id = i;a[i].pos = a[i].l / unit;}sort(a + 1, a + 1 + m);int l = 1, r = 0;LL ans = 0;for (int i = 1; i <= m; i++){while (l > a[i].l){l--;//操作ans += }while (r < a[i].r){r++;//操作ans +=  }while (l < a[i].l){ans -=  //操作l++;}while (r > a[i].r){ans -=  //操作r--;}Ans[a[i].id] = ans;}for (int i = 1; i <= m; i++)printf("%lld\n", Ans[i]);return 0;
}

我也不知道该咋分类--莫队算法相关推荐

  1. C++ 莫队算法(转)

    胡小兔的良心莫队教程:莫队.带修改莫队.树上莫队 在开始学习莫队之前,照例先甩一道例题:BZOJ 1878 HH的项链. 题意:求区间内数的个数,相同的数只算一次. 在我关于这道题的上一篇题解中,我使 ...

  2. 清橙A1206 小Z的袜子(莫队算法)

    A1206. 小Z的袜子 时间限制:1.0s   内存限制:512.0MB   总提交次数:744   AC次数:210   平均分:44.44 将本题分享到:        查看未格式化的试题    ...

  3. 曼哈顿距离最小生成树莫队算法

    参考资料:https://www.cnblogs.com/CsOH/p/5904430.html https://blog.csdn.net/huzecong/article/details/8576 ...

  4. 莫队算法(小Z的袜子)

    目前的题型概括为三种:普通莫队,树形莫队以及带修莫队. 例题一:小Z的袜子 ·述大意: 进行区间询问[l,r],输出该区间内随机抽两次抽到相同颜色袜子的概率. ·分析: 对于L,R的询问.设其中颜色为 ...

  5. 普通、带修(可持久化)莫队算法入门例题详解

    目录 [莫队算法] [普通莫队] [代码] [题面] [带修莫队] [代码] [题面] [总结] [莫队算法] 参考大米饼的莫队算法 ,目前的题型概括为三种:普通莫队,带修莫队以及树形莫队. [普通莫 ...

  6. 小Z的袜子(hose) (莫队算法入门)

    小Z的袜子(hose) 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...

  7. NBUT 1457 Sona(莫队算法+离散化)

    [1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...

  8. XOR and Favorite Number CF340E 莫队算法

    题目链接 题意:求给定询问区间[L,R]问有多少连续区间异或值等k,多次询问可以离线. a[i]^a[i+1]^a[i+2]^a[n]=(a[1]^a[2]^a[3]^...^a[i-1])^(a[1 ...

  9. Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组

    题目链接 题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k. 首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t ...

最新文章

  1. 从pfx里面 解析出公私钥
  2. 基于python的文件加密传输系统 毕业论文_20183411 李丞灏 2020-2021 《python程序设计》 实验三 加密传输文件 实验报告...
  3. AspectJ 中的pointcut 语法
  4. 分布式链路追踪框架的基本实现原理
  5. 数据结构与算法-- 广度优先打印二叉树
  6. 星之卡比镜之迷宫机器人_机器人工程师入门(0)
  7. STL源码剖析 第二次温习 细节审核
  8. highCharts如何实现json数组数据的图形展示
  9. LeetCode:旋转链表【61】
  10. UMD格式与解析详解
  11. 数据库备份的几种方式的详细步骤
  12. java毕业设计总结
  13. 浅谈Redis延迟测试方法
  14. 深度|人脸图像的技术原理及在电商业务中的应用
  15. 疯狂的程序员-第六十七章
  16. Python 对称矩阵顺时针旋转90度
  17. (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest
  18. 广义相加模型(GAM)及R实现
  19. 图情论文笔记 | 川大实践之红色资源开发利用路径探索
  20. Hadoop or TDengine,如何做物联网大数据平台的选型?

热门文章

  1. Android通过广播实现强制下线功能
  2. NSFileHandle
  3. 数学知识在计算机专业中的应用,数学建模在计算机专业中的应用
  4. 协议类接口 - NAND
  5. (一)Builder(建造者)模式
  6. Mongodb查询语句与Sql语句对比
  7. TabLayout 与 FragmentTabHost
  8. MySql查找几个字段的值一样的记录
  9. PLSQL_案例优化系列_学会应用工具进行SQL整体优化(案例11)
  10. android中私有方法 继承,Android项目实战系列—基于博学谷(五)个人资料