当前位置: 首页 > news >正文

洛谷 P2709:[模板] 莫队 / 小 B 的询问 ← 莫队算法

【题目来源】
https://www.luogu.com.cn/problem/P2709

【题目描述】
小 B 有一个长为 n 的整数序列 a,值域为 [1,k]。
他一共有 m 个询问,每个询问给定一个区间 [l,r],求:\sum_{i=1}^kc_i^2 
其中 ci 表示数字 i 在 [l,r] 中的出现次数。
小 B 请你帮助他回答询问。

【输入格式】
第一行三个整数 n,m,k。
第二行 n 个整数,表示小 B 的序列。
接下来的 m 行,每行两个整数 l,r。​​​​​​​

【输出格式】
输出 m 行,每行一个整数,对应一个询问的答案。​​​​​​​

【输入样例】
6 4 3
1 3 2 1 1 3
1 4
2 6
3 5
5 6​​​​​​​

【输出样例】
6
9
5
2

【数据范围】
对于 100% 的数据,1≤n,m,k≤10^5。

【算法分析】
● 基础莫队算法(Mo's Algorithm)​ 是一种用于解决离线区间查询问题的算法,由莫涛在 2010 年提出。莫队算法是‌基于分块思想‌构建的离线区间查询优化算法,分块为其提供‌排序依据与复杂度保障‌,两者关系可概括为"‌莫队=离线+暴力转移+分块排序‌"。‌

● 莫队算法是一种用于解决离线区间查询问题的算法,其核心思想是通过分块排序来优化指针移动顺序,从而降低总时间复杂度。奇偶性排序是莫队算法中的一个重要优化技巧,具体实现如下:
(1)首先,将长度为 n 的序列分成 sqrt(n) 个块;
(2)然后,将所有询问按左端点 L 所在的块编号为第一关键字排序。当左端点在同一块内时,采用奇偶性排序优化右端点 R 的顺序:若左端点位于奇数块,则右端点 R 从小到大排序;若左端点位于偶数块,则右端点 R 从大到小排序
这样可以减少右指针在块间切换时的回跳次数,进一步提升算法效率。​​​​​​​

【算法代码】

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int N=1e5+5;
LL a[N],cnt[N],ans[N];
LL cur;
int block,n,m,k;struct Node {int le,ri,idx;
} q[N];bool cmp(Node a,Node b) {if(a.le/block!=b.le/block) {return a.le<b.le;}return a.ri<b.ri;
}void add(int x) {int val=a[x];cur+=2*cnt[val]+1;cnt[val]++;
}void del(int x) {int val=a[x];cnt[val]--;cur-=2*cnt[val]+1;
}int main() {ios::sync_with_stdio(false);cin.tie(0);cin>>n>>m>>k;for(int i=1; i<=n; i++) cin>>a[i];block=sqrt(n);for(int i=0; i<m; i++) {cin>>q[i].le>>q[i].ri;q[i].idx=i;}sort(q,q+m,cmp);int le=1,ri=0;for(int i=0; i<m; i++) {while(le>q[i].le) add(--le);while(le<q[i].le) del(le++);while(ri<q[i].ri) add(++ri);while(ri>q[i].ri) del(ri--);ans[q[i].idx]=cur;}for(int i=0; i<m; i++) {cout<<ans[i]<<"\n";}return 0;
}/*
in:
6 4 3
1 3 2 1 1 3
1 4
2 6
3 5
5 6out:
6
9
5
2
*/



【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/138976338
 

http://www.jsqmd.com/news/1244001/

相关文章:

  • 2026年7月卡萨帝空调售后服务电话24小时全新专属热线升级公示最新公告 - 家电技术百科
  • 2026 年当下,岫岩满族自治比较好的翅片管源头厂家全面解析与选购指南,揭秘飞行器效率的秘密:这小管子到底有多关键? - 行业严选官
  • 视频内容转文字软件哪个好用?2026三款工具对比 - 工具测试专家
  • 武汉各区空调维修师傅名录|24小时报修电话|简单到家 - 简单到家
  • Spring Lemon完全指南:构建企业级Spring Boot Web应用的终极工具
  • 真力时太原2026年7月最新官方服务网点地址与客户热线通知 - 亨得利钟表维修中心
  • 微软开源MarkItDown:AI时代的多格式文档转换神器
  • AI客户生命周期管理落地失败真相(92%企业踩中的3个算法陷阱)
  • Label Studio免费开源数据标注工具:AI模型训练的完美数据管家
  • RPCS3完整指南:如何在现代PC上完美运行PS3游戏
  • 劳力士养护手表专业保养与维修服务指南权威公示(2026年7月最新) - 劳力士服务中心
  • 2026 最新|抖音小店一件代发完整操作流程,新手直接照做(抖掌柜) - 电商分享
  • 深圳长途搬家搬厂:长途搬厂+办公家具运输报价标准,企业预算规划参考 - szxybj
  • fastapi: 给docs文档添加用户名密码验证
  • 2026年7月麦克维尔空调售后服务电话24小时全新专属热线升级公示最新说明 - 家电技术百科
  • 广州新房除甲醛哪家正规?本地实地走访三家品牌横评 - 环保除醛知识库
  • 【AI口播视频爆款公式】:20年视频算法专家亲授3大优化维度、7个致命误区、90%创作者忽略的语音-画面协同黄金比
  • ELF interpreter /lib64/ld-linux-x86-64.so.2 not found, error 2问题解决以及localsentd软件在Ubuntu兼容层的安装
  • 爱回收买二手电脑靠谱吗?联想拯救者R9000P 2021实测,游戏本能不能买二手 - 资讯快报
  • 数字环保产业领路人|越华环保王长历职称、技术成果、产学研体系全解析
  • ComfyUI-LTXVideo终极指南:本地AI视频生成完整教程
  • OpenRouter:13亿美元估值背后,能否在多模型时代守住价值?
  • 2026年7月最新欧米茄长沙北辰三角洲大悦城维修保养服务电话 - 欧米茄官方服务中心
  • 香材哪家性价比高:问菩文创原材划算 - 松梢月冷
  • 2026年7月美度**金华售后服务最新网点地址及客服热线通知 - 亨得利官方服务中心
  • 动态表达式解析器(DynamicExpresso)完整指南:如何在.NET中实现运行时C表达式执行
  • 商丘网站建设商丘老板别踩坑,这几点不搞清楚就是扔钱
  • 爱回收买二手华为靠谱吗?Mate 60 Pro二手入手全记录,卫星通话和麒麟9000S能正常用吗 - 资讯快报
  • 英语(一)心计算机-固定搭配—东方仙盟
  • 为什么选择RPCS3:3个让你在电脑上重温PS3游戏的理由