浅谈莫队 简介 莫队算法是由莫涛提出的算法。在莫涛提出莫队算法之前,莫队算法已经在 Codeforces 的高手圈里小范围流传,但是莫涛是第一个对莫队算法进行详细归纳总结的人。 莫涛提出莫队算法时,只分析了普通莫队算法,但是经过 OIer 和 ACMer 的集体智慧改造,莫队有了多种扩展版本。 莫队算法可以解决一类离线区间询问问题,适用性极为广泛。 1\leq n \leq 5\times 10^4,1\leq m \leq 2\times 10^5,0\leq a_i \leq 10^6 Solution 首先考虑暴力,如果对于每一个询问,直接暴力枚举区间每个数 +10,M=2e5+10,C=1e6+10; int n,m,S,a[N],bl[N],cnt[C],Ans,ans[M],tot,l,r; struct Que{int l,r,id;}q[M]; I 可以用和普通莫队类似的方法排序转移,做到 O(N^{\frac{5}{3}})。
概述 莫队算法是由莫涛提出的算法,可以解决一类离线区间询问问题,适用性极为广泛。同时将其加以扩展,便能轻松处理树上路径询问以及支持修改操作。 Example input: 5 2 3 1 2 3 2 2 1 2 2 4 1 5 Example output: 0 //没有 1 //2 0 //没有(2太多了,也不算) 解法 比如一开始Left=2,Right=3,而L=1,R=5,那么我们把Left--,并且把新的Left位置上的数字出现次数+1,Right++,把新的Right位置上的数字出现次数+1,直到Right=5 ,下面介绍一下如何用莫队算法解决这道题。 、(5,8)、(6,8)和(7,9)、(8,9)。
提莫攻击 在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。 现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。 你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。 示例 输入: [1,4], 2 输出: 4 原因: 第 1 秒初,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒末结束。 第 4 秒初,提莫再次攻击艾希,使得艾希获得另外 2 秒中毒时间。 所以最终输出 4 秒。 输入: [1,2], 2 输出: 3 原因: 第 1 秒初,提莫开始对艾希进行攻击并使其立即中毒。 但是第 2 秒初,提莫再次攻击了已经处于中毒状态的艾希。 由于中毒状态不可叠加,提莫在第 2 秒初的这次攻击会在第 3 秒末结束。 所以最终输出 3 。
在地理统计学科中应用较多,现已有多种指数可以使用,但最主要的有两种指数,即Moran的I指数和Geary的C指数,也就是我们常说的莫兰指数和G统计量。 ---- 今天我们就先了解一下度量空间相关性的一个重要指标之一的莫兰指数。 莫兰指数分为全局莫兰指数和局部莫兰指数。 // 值的分布 // 莫兰指数是一个有理数,通过方差归一化操作之后,其值将分布在[-1,1]之间,用来判别空间是否存在自相关。当值大于0时,表示数据呈现空间正相关,其值越大空间相关性越明显。
在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。 你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。 示例1: 输入: [1,4], 2 输出: 4 原因: 在第 1 秒开始时,提莫开始对艾希进行攻击并使其立即中毒。 在第 4 秒开始时,提莫再次攻击艾希,使得艾希获得另外 2 秒的中毒时间。 所以最终输出 4 秒。 但是在第 2 秒开始时,提莫再次攻击了已经处于中毒状态的艾希。 由于中毒状态不可叠加,提莫在第 2 秒开始时的这次攻击会在第 3 秒钟结束。 所以最终输出 3。 你可以假定提莫攻击时间序列中的数字和提莫攻击的中毒持续时间都是非负整数,并且不超过 10,000,000。
.
输入样例: 6 5 1 2 3 4 5 5 Q 1 4 Q 2 6 R 1 2 Q 1 4 Q 2 6 输出样例: 4 4 3 4 2.1 思想 在基础莫队的基础上由于有修改操作,所以需要再增加一维代表时间 数据范围 1≤N≤10^5, 1≤Q≤10^5, 1≤X_i≤10^9 输入样例: 5 5 9 8 7 8 9 1 2 3 4 4 4 1 4 2 4 输出样例: 9 8 8 16 16 2.1 题目分析 那么就要在基本莫队的基础上进行优化。另外,此题的数字取值很大但是个数在 10^5 以内,所以需要进行一下离散化,具体在代码中体现。 输入样例: 8 2 105 2 9 3 8 5 7 7 1 2 1 3 1 4 3 5 3 6 3 7 4 8 2 5 3 8 输出样例: 4 4 4.1 树变序列思想 这道题其实就是将基本莫队那道例题搬到了树上 数据范围 1≤n,m≤10^5, 0≤k≤14, 0≤a_i<2^{14}1≤l<r≤n 输入样例: 5 3 2 1 1 4 7 7 1 5 1 3 3 5 输出样例: 8 2 2 核心思想 莫队的本质其实就是调整查询的顺序使得局部查询具有单调性
简介 树上莫队,顾名思义就是把莫队搬到树上。 像这种不带修改数颜色的题首先想到的肯定是树套树莫队,那么如何把在序列上的莫队搬到树上呢? 它的核心思想是:当访问到点$i$时,加入序列,然后访问$i$的子树,当访问完时,再把$i$加入序列 煮个栗子,下面这棵树的欧拉序为 $1\ 2\ 3\ 4\ 4\ 5\ 5\ 6\ 6\ 3\ 7\ 7 树上莫队 有了这个有什么用呢? 比如当询问为$4,7$时,$(ed[4],st[7]) = 4\ 5\ 5\ 6\ 6\ 3\ 7\ $。大家发现了什么?没错!
「东施效颦」的故事,纵然是在当时当下的情境之下,依然还是在不断地发生着。借鉴别人的先进经验,为我所用,并没有错。但是,如果将别人的所谓的先进的经验照搬照抄,甚至将此看成是推卸责任,掩盖事实的方式和方法,是无论如何都无法原谅的。即使是无法原谅,但是,这样的事例却无时无刻不再我们的身边发生着。
如下所示 进入急救模式 进入内核模式
莫兰指数(Moran’s I)是研究变量在同一个分布区内的观测数据之间潜在的相互依赖性的一个重要研究指标,在本文中,我们将探讨局域(Anselin Local Moran I)与全域两种莫兰指数(Moran 全域莫兰指数 首先请注意,在Arcgis中计算莫兰指数时只能使用矢量数据进行计算。所以如果需要计算一个栅格数据的莫兰指数的话,建议先转换成矢量数据再进行计算。 计算全域莫兰指数的工具为【工具箱——Spatial Statistics Tools——分析模式——空间自相关(Moran I)】 输入要素与需要计算莫兰指数的字段 关于生成报表,建议勾选, 关于【空间关系的概念化】的选择,指路虾神的文章→白话空间统计之五:空间关系的概念化(上) 局域莫兰指数 局域莫兰指数与全域莫兰指数的计算使用的并不是同一个工具,作者刚刚开始用Arcgis计算局域莫兰指数时也迷惑了一下 hhh 计算局域莫兰指数的工具在【工具箱——Spatial Statistics Tools——聚类分布制图——聚类和异常值分析(Anselin Local Moran I)】 与全域莫兰指数几乎同样的设置
缘起 掌握莫队核心科技,来入坑一下二次离线莫队~ 本文的例题是 洛谷 P4887 模板 莫队二次离线(第十四分块(前体)) 分析 珂朵莉给了你一个序列a,每次查询给一个区间 [l,r] 查询 l<=i< 5 2 3 4 8 0 2 4 5 3 5 1 4 2 5 1 5 输出样例 0 1 2 3 4 1≤n,m≤1e5,0≤ai,k<16384 首先,二次离线莫队的前置技能是 【1】《优雅的暴力—— 二次离线莫队依旧是莫队嘛,所以肯定先要按莫队的套路来,我们先不考虑什么二次离线莫队,先用不带修莫队来切. 纵观这个处理方法,不就是将跑不带修莫队过程中会遇到的所有8种贡献再次离线出来吗? 因为这是再一次离线(莫队本身有一次离线),所以这个算法才叫做二次离线莫队. 而仔细观察一下(4),(5),(5),(7) 这些贡献,其实就分为2类 第一类 a[x+1] 对 前缀a[1,..,x]的贡献,其中 x 会变化 第二类 a[l,..
老师讲课的时候就提到过带修改莫队在线莫队树上莫队树上带修改莫队……但是一直都没有做到过有关的题, 今天有幸做了一道裸的带修改莫队的题, 那就来分享一下自己的经验 带修改的莫队 首先我们要知道,普通的莫队算法是不资瓷修改操作的 , 不过后人对莫队算法加以改进 发明了资瓷修改的莫队算法 思路: 在进行修改操作的时候,修改操作是会对答案产生影响的(废话) 那么我们如何避免修改操作带来的影响呢? ,就改过去 反之如果改多了就改回来 说的听绕口的 比如,我们现在已经进行了3次修改,本次查询是在第5次修改之后,那我们就执行第4,5次修改 这样就可以避免修改操作对答案产生的影响了 code 题目链接 for(int i=1;i<=N;i++) a[i]=read(),where[i]=(i-1)/base+1; while(M--) { char opt[5] 综上莫队算法的排序保证时间复杂度是 的 带修改莫队算法的时间复杂度证明 以下内容借鉴自洛谷题解 原版莫队是将区间(l,r)视为点(l,r),带修改的即加一维时间轴(l,r,t) 对于t轴的移动可以保存每次修改
机器学习方法 1.1 机器学习 通常来说, 机器学习的方法包括: 监督学习 supervised learning:(有数据有标签)在学习过程中,不断的向计算机提供数据和这些数据对应的值,如给出猫、狗的图片并告诉计算机哪些是猫哪些是狗,让计算机去学习分辨 非监督学习 unsupervised learning:(有数据无标签)例给猫和狗的图片,不告诉计算机哪些是猫哪些是狗,而让它自己去判断和分类。不提供数据所对应的标签信息,计算机通过观察数据间特性总结规律 半监督学习 semi-supervised le
输入输出样例 输入 #1复制 6 4 3 1 3 2 1 1 3 1 4 2 6 3 5 5 6 输出 #1复制 6 9 5 2 说明/提示 【数据范围】 对于 100% 的数据,1≤n,m,k≤5e4 为了符合离线的姿势,我们自然是这么处理问题的: 如果你现在知道[2, 5]的区间和是18,现在问你[2, 6]的区间和, 你会怎么做? 很简单, [2, 5]的答案加上a[6]不就是 [2, 6] 的答案了吗? 所以答案是 18+4=22 同理,[2, 4]的答案呢? 不就是 [2, 5] 区间的答案减去 a[5] 么? 就是 18-7=11 于是, [3, 6]的答案就是[2,5]的答案减去a[2]加上a[6], 所以[3, 6]的答案是 18-8+4=14 其他区间以此类推 下面把上面的举例抽象化一下 ? (*x++); } ilv writeln(char *x) { write(x); pc(10); } } using namespace fastio; const int maxn = 5e4
维护好每个数出现的左右位置之后直接上不删除莫队就行了 #include<bits/stdc++.h> const int MAXN = 1e5 + 10, INF = 1e9 + 7; using namespace
浅谈莫比乌斯反演 那些各种各样的性质与定理,大多是前人几年甚至几十年才得出来的,哪里是你几天就能理解并证明的。 简介 莫比乌斯反演是数论中的重要内容。 对于一些函数 f(n),如果很难直接求出它的值,而容易求出其倍数和或约数和 g(n),那么可以通过莫比乌斯反演简化运算,求得 f(n) 的值。 --OI Wiki 莫比乌斯函数 定义 \mu(d)=\begin{cases}1&d=1\\(-1)^k&d=\prod_{i=1}^kp_i\text{且}p_i\text{为互不相同的质数}\ 性质 莫比乌斯函数是积性函数,并且有以下性质: \sum\limits_{dn}\mu(d)=\begin{cases}1 & n=1\\0 & n\not = 1\end{cases} \sum\ limits_{dn}\frac{\mu(d)}{d}=\frac{\phi(n)}{n} 求法 由于莫比乌斯函数是典型的积性函数,所以也可以用欧拉筛筛出来。
+1,q+1+m,cmp2); for(int i=1;i<=m;i++){ printf("%d\n",q[i].ans); } return 0; } /* 6 1 4 7 5 6 3 4 1 4 2 5 4 5 4 6 */
缘起 入坑数论中的重要的部分——莫比乌斯函数 分析 本文的例题来自 Hdu 6053 TrickGCD 莫比乌斯函数的入门题. mod掉 1e9+7 【样例输入】 1 4 4 4 4 4 【样例输出】 Case #1: 17 【限制】 2500ms 256MB 【来源】 2017暑期多校训练第二场 要解决这道题目,它要求莫比乌斯 所以我们先来学习一下mobius函数. mobius函数是一个数论函数,它是由德国著名天文学家以及数学家莫比乌斯(没错,就是发现莫比乌斯环这种反人类的拓扑结构的天才人物),它的定义如下 ? 而因为 ,所以 d 在 [2, 1e5] 范围内 . d 对答案的贡献简单的使用乘法原理便可求出 ? 特别的,如果 的话, gx(d) = 0. 根据容斥原理 ? 即通过mobius函数的线性筛法我们可以知道 [1,1e5]内所有的数的 mobius 函数值.
所以我们来学一下莫比乌斯反演吧~ 分析 《莫比乌斯函数入门》中我们已经学习了mobius函数. 现在要来进一步学习mobius反演. 奉上完整的代码 // 此处省略一些头部文件... const int maxn = 1e6+5; int n, m, prime[maxn], isp[maxn], tot, mu[maxn], sum 注意, (5, 7) 和 (7, 5) 被认为是相同点对 【输入】 多样例,第一行是样例数, 每个样例 有五个数. 0<a<=b<=1e5, 0<c<=d<=1e5, 0<=k<=1e5 输入保证 a , 9对(x,y) 如下 (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 5), (3, 4), (3, 5). { pc(c); } ilv writeln(char c) { write(c); pc(10); } } using namespace fastio; const int maxn = 1e5+