说在前面:

  • 莫队算法只能用于离线查询:什么是离线查询,就是输入了查询的区间,不用立即给出答案,可以在所有的区间都输入完毕之后统一的给出答案
  • 要是我们用最笨的方法:就是直接计算相应的区间和,那离线的优势你就没有用到
  • 另一种方法:
  • 但是这种方法有个漏洞:
    要是左右横条太剧烈,那就很难受,因为每次都是一步一步跳那么多次,失去了优势
  • 能不能有一种查询顺序让左右横条少点了

莫队

  • 我们把要查询的 L R 区间存起来,排个序
    要是按照L 排序,那么极端情况就是R 从最右到最左再到最右,一直这样
  • 我们按照R 排序,同理
  • 莫队结合了块的思:
    L 所在块为第一关键字
    R 的位置就第二关键字
    假设 按序号(id)1 2 3 的顺序查询
    我们排个序变成了 2 1 3
    但是我们输出的时候不能按照 2 1 3 的循序输出,所以要记录我们的最开始 的 循序 也就是id 为 1 2 3

    要是再加上序号4:
    循序就是2 1 3 4 的循序,但是还是要记录id
    这就是莫队算法的过程。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int sizen;
struct node{int l,r,id;bool operator < (const node & n) const {if(l/sizen==n.l/sizen)return r<n.r;else return l/sizen< n.l/sizen;}
}q[maxn];
int n,m;
int data[maxn];int Ans[maxn];
int ans;
void add(int n){}
void sub(int n){}
main(){cin>>n>>m;for(int a=0;a<n;a++){cin>>data[a];}for(int a=0;a<m;a++){cin>>q[a].l>>q[a].r;q[a].id=a;}sort(q,q+m);/// 首先要定义当前的 L R/// 初始化的时候要是空集 也就是什么也不包含///  L 比 R 还 右 就是什么也不包含,但是只要一个动了,就包含了一个;int l=1;int r=0;for(int a=0;a<m;a++){while(l<q[a].l)sub(l--);while(l>q[a].l)add(--l);while(r<q[a].r)add(++r);while(r>q[a].r)sub(r++);Ans[q[a].id]=ans;
}}

看代码就知道 核心的算法就是

for(int a=0;a<m;a++){while(l<q[a].l)sub(l--);while(l>q[a].l)add(--l);while(r<q[a].r)add(++r);while(r>q[a].r)sub(r++);Ans[q[a].id]=ans;}要注意不同的题目的add 和sub函数不同,要自己写就完事了!

莫队-一个让查询的高效的方法-并不深刻的讲解文章-但是易懂!相关推荐

  1. 【周末狂欢赛6】[AT1219]历史研究(回滚莫队),大魔法师(矩阵+线段树),单峰排列

    文章目录 T1:单峰排列 题目 题解 code T2:历史研究 题目 题解 code T3:大魔法师 题目 题解 code 我可能这辈子都更不出来狂欢赛5了,先咕咕 T1:单峰排列 题目 一个n的全排 ...

  2. bzoj3920: Yuuna的礼物(莫队+分块套分块)

    思路挺简单的,但是总感觉好难写...码力还是差劲,最后写出来也挺丑的 这题显然是个莫队题,考虑怎么转移和询问... 根据莫队修改多查询少的特点,一般用修改快查询慢的分块来维护.查第$k_1$小的出现次 ...

  3. 【BZOJ】3052: [wc2013]糖果公园 树分块+带修改莫队算法

    [题目]#58. [WC2013]糖果公园 [题意]给定n个点的树,m种糖果,每个点有糖果ci.给定n个数wi和m个数vi,第i颗糖果第j次品尝的价值是v(i)*w(j).q次询问一条链上每个点价值的 ...

  4. php制作万年历的步骤_php制作一个万年历查询的实例代码教程

    下面是php制作一个万年历查询的实例代码教程的相关内容,文章教程主要讲述与万年历 php 相关的一些技术与知识,更多的内容欢迎大家访问http://www.alixixi.com,获取更多最新教程,下 ...

  5. 莫队 ---- 值域分块处理优化字典树上的查询 杭电多校2021第二场1004 i love counting

    题目链接 题目大意: 就是给你nnn个数,mmm次询问 每次询问给你l,r,a,bl,r,a,bl,r,a,b问你在[l,r][l,r][l,r]区间里面有多少种种种数c(XOR)a≤bc(XOR)a ...

  6. 牛客练习赛10 F-序列查询(莫队+链表)

    F-序列查询 v5zsq题解 假设数字xxx在区间[l,r]种出现y次,那么包含x的子区间个数为2r−l+1−y⋅(2y−1)2^{r-l+1-y}·(2^y-1)2r−l+1−y⋅(2y−1),因此 ...

  7. 【bzoj5016】[Snoi2017]一个简单的询问 莫队算法

    题目描述 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. 输入 第一行,一个数字N,表 ...

  8. [ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)

    一次性写两道题 T1:一个简单的询问 题目 题解 代码实现 T2:愤怒的小鸟 题目 暴搜题解 暴搜代码实现 状压DP题解 状压DP代码实现 T1:一个简单的询问 题目 给你一个长度为 N 的序列 ai ...

  9. P5268-[SNOI2017]一个简单的询问【莫队】

    正题 题目链接:https://www.luogu.com.cn/problem/P5268 题目大意 nnn个数的一个序列,定义get(l1,r1,x)get(l_1,r_1,x)get(l1​,r ...

最新文章

  1. Aooms_基于SpringCloud的微服务基础开发平台实战_002_工程构建
  2. 图片宽度自适应浏览器宽度
  3. Python 基础入门--简介和环境配置
  4. mongoose 数据库设计千万要注意 Cast to [number] failed for value
  5. SpringBoot笔记整理(二)
  6. java学习之自定义异常
  7. Uncaught SyntaxError: Unexpected token export
  8. 如何成为一名出色的架构师?
  9. SpringMVC + AJAX 实现多文件异步上传
  10. 使用主成分分析进行人脸识别
  11. ubuntu18重启vncserver_Windows 10 远程连接 Ubuntu 18.04 Server图形界面
  12. 2022-2028年中国高尔夫GPS手表行业竞争现状及投资策略研究报告
  13. GRE词汇竟然六小时背一遍
  14. 有关vista系统的激活工具
  15. 计算机视觉领域的一些牛人博客,超有实力的研究机构web主页(转)
  16. 英语演讲常用连接词和句子
  17. 字段缩写ti表示什么_以下哪个字段缩写表示“摘要”?
  18. 新来个阿里 P7,仅花 2 小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!...
  19. easyui修改以及datagrid dialog form控件使用
  20. 十四、系统与环境函数

热门文章

  1. Arduino 四针脚声音传感器
  2. #4259. 越野赛车问题
  3. 前端、vue、Vue3弹幕实现;前端CSS实现弹幕
  4. 智慧发电厂+智能发电厂web端平台管理系统+Axure高保真智慧电厂系统+能耗管理+告警管理+生产监控+安防设备管理+运维设备管理+监控面板+系统管理+智慧电厂+电厂系统+智慧电厂管理平台+rp原型
  5. 利用辐射光谱计算温度 matlab,时间调制型FTIR光谱仪辐射度定标方法的研究
  6. Mybatis中#和$的区别
  7. 宋图图的工学课程12
  8. 我的物联网项目(二十四) 订单编号生成规则
  9. MTK外部音频功放gpio控制
  10. 2022年必刷前端高频面试题