我也不知道该咋分类--莫队算法
莫队算法可以一个可高效解决绝大多数离线+无修改+区间查询问题的算法。这类问题具体是指:如果知道[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;
}
我也不知道该咋分类--莫队算法相关推荐
- C++ 莫队算法(转)
胡小兔的良心莫队教程:莫队.带修改莫队.树上莫队 在开始学习莫队之前,照例先甩一道例题:BZOJ 1878 HH的项链. 题意:求区间内数的个数,相同的数只算一次. 在我关于这道题的上一篇题解中,我使 ...
- 清橙A1206 小Z的袜子(莫队算法)
A1206. 小Z的袜子 时间限制:1.0s 内存限制:512.0MB 总提交次数:744 AC次数:210 平均分:44.44 将本题分享到: 查看未格式化的试题 ...
- 曼哈顿距离最小生成树莫队算法
参考资料:https://www.cnblogs.com/CsOH/p/5904430.html https://blog.csdn.net/huzecong/article/details/8576 ...
- 莫队算法(小Z的袜子)
目前的题型概括为三种:普通莫队,树形莫队以及带修莫队. 例题一:小Z的袜子 ·述大意: 进行区间询问[l,r],输出该区间内随机抽两次抽到相同颜色袜子的概率. ·分析: 对于L,R的询问.设其中颜色为 ...
- 普通、带修(可持久化)莫队算法入门例题详解
目录 [莫队算法] [普通莫队] [代码] [题面] [带修莫队] [代码] [题面] [总结] [莫队算法] 参考大米饼的莫队算法 ,目前的题型概括为三种:普通莫队,带修莫队以及树形莫队. [普通莫 ...
- 小Z的袜子(hose) (莫队算法入门)
小Z的袜子(hose) 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...
- NBUT 1457 Sona(莫队算法+离散化)
[1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...
- 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 ...
- Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组
题目链接 题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k. 首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t ...
最新文章
- 从pfx里面 解析出公私钥
- 基于python的文件加密传输系统 毕业论文_20183411 李丞灏 2020-2021 《python程序设计》 实验三 加密传输文件 实验报告...
- AspectJ 中的pointcut 语法
- 分布式链路追踪框架的基本实现原理
- 数据结构与算法-- 广度优先打印二叉树
- 星之卡比镜之迷宫机器人_机器人工程师入门(0)
- STL源码剖析 第二次温习 细节审核
- highCharts如何实现json数组数据的图形展示
- LeetCode:旋转链表【61】
- UMD格式与解析详解
- 数据库备份的几种方式的详细步骤
- java毕业设计总结
- 浅谈Redis延迟测试方法
- 深度|人脸图像的技术原理及在电商业务中的应用
- 疯狂的程序员-第六十七章
- Python 对称矩阵顺时针旋转90度
- (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest
- 广义相加模型(GAM)及R实现
- 图情论文笔记 | 川大实践之红色资源开发利用路径探索
- Hadoop or TDengine,如何做物联网大数据平台的选型?