首页 > 编程语言 >根号算法——莫队

根号算法——莫队

时间:2024-09-04 15:05:27浏览次数:6  
标签:10 分块 算法 莫涛 莫队 根号

前置知识

  • 分块

前言

莫队算法是由莫涛提出的算法。在莫涛提出莫队算法之前,莫队算法已经在 Codeforces 的高手圈里小范围流传,但是莫涛是第一个对莫队算法进行详细归纳总结的人。莫涛提出莫队算法时,只分析了普通莫队算法,但是经过 OIer 和 ACMer 的集体智慧改造,莫队有了多种扩展版本。
莫队算法可以解决一类离线区间询问问题,适用性极为广泛。同时将其加以扩展,便能轻松处理树上路径询问以及支持修改操作。

形式

假设 \(n=m\),那么对于序列上的区间询问问题,如果从 \([l,r]\) 的答案能够 \(O(1)\) 扩展到 \([l-1,r],[l+1,r],[l,r+1],[l,r-1]\)(即与 \([l,r]\) 相邻的区间)的答案,那么可以在 \(O(n\sqrt{n})\) 的复杂度内求出所有询问的答案。
比如前缀和。

实现

首先,按照 \(l, r\) 排序。
然后,每次考虑 \((l, r)\to (l',r')\)。
每次移动 \(l,r\) 到合适的位置。
但是我们发现如果数据是这样:

(1, 10)
(2, 2)
(3, 10)
(4, 4)
(5, 10)
(6, 6)
(7, 10)
(8, 8)
(9, 10)
(10, 10)

这样我们的算法就变成了 \(O(n^2)\) 的。
所以我们考虑分块,按照所在块的编号排序
比如我们分块: 1 2 3 4 | 5 6 7 | 8 9 10
那么排序完变成:

(2, 2)
(4, 4)
(1, 10)
(3, 10)
(6, 6)
(5, 10)
(7, 10)
(8, 8)
(9, 10)
(10, 10)

这样我们的时间复杂度就变成了 \(O(n \sqrt (n))\)。

标签:10,分块,算法,莫涛,莫队,根号
From: https://www.cnblogs.com/kimi0705/p/-/MoAlgorithm

相关文章

  • 数据结构和算法
    数据结构和算法数据结构数组(Array):一种线性数据结构,可以存储相同类型的元素,支持基于索引的快速访问。链表(LinkedList):由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。栈(Stack):遵循后进先出(LIFO)原则的线性数据结构,只能在一端(栈顶)进行添加或删除操作。队列(Queue):......
  • 【开源大模型生态2】数据、算力、算法,越来越猛!
    人工智能(A)的快速发展依赖于三个核心要素:数据,算法,算力。这个观点已经得到了业界的高度认可。只有这三个要素同时满足了才能加速人工智能的大发展。随着人工智能大模型规模变大以及普及应用,人工智能对能源的需求也在不断加大,逐渐成为人工智能发展关键因素之一。从感知、认......
  • 【数据结构和算法实践-树-LeetCode100-判断是否是相同的树】
    数据结构和算法实践-树-LeetCode100-判断是否是相同的树题目MyThought代码示例JAVA-8题目给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例输入:p=[1,2,3],q=[1,2......
  • 【数据结构和算法实践-链表-LeetCode23-合并K个有序数组】
    合并K个有序数组题目MyThought代码示例JAVA-8题目合并K个有序数组MyThought一、将ListNode放入PriorityQueue中1.1、设置PriorityQueue的比较器规则1.2、将ListNode[]放入priorityQueue二、再将数据依次弹出放到ListNode中代码示例JAVA-8publicListNod......
  • 【路径规划】移动机器人在未知环境下目标的路径规划算法
    摘要本文介绍了一种新型路径规划算法,专用于在包含多个障碍物的环境中为机器人找到最优路径。该算法通过分析障碍物位置和目标点位置,生成一个引导机器人避开障碍物并到达目标的路径。项目展示了路径规划在机器人导航中的重要性,并通过实验验证了算法的有效性。理论路径规划是......
  • 掌握检索技术:构建高效知识检索系统的架构与算法12
    在检索专业知识层需要涵盖更高级的检索技术,包括工程架构和算法策略。一、工程架构工程架构在构建检索系统中决定了系统的可扩展性、高可用性和性能。比如需要考虑的基本点:分布式架构:水平扩展:采用分布式架构,将检索任务分布到多个节点上,实现水平扩展。这可以通过将索引数据......
  • 掌握检索技术:构建高效知识检索系统的架构与算法29
    在检索专业知识层需要涵盖更高级的检索技术,包括工程架构和算法策略。一、工程架构工程架构在构建检索系统中决定了系统的可扩展性、高可用性和性能。比如需要考虑的基本点:分布式架构:水平扩展:采用分布式架构,将检索任务分布到多个节点上,实现水平扩展。这可以通过将索引数据......
  • 掌握检索技术:构建高效知识检索系统的架构与算法27
    在检索专业知识层需要涵盖更高级的检索技术,包括工程架构和算法策略。一、工程架构工程架构在构建检索系统中决定了系统的可扩展性、高可用性和性能。比如需要考虑的基本点:分布式架构:水平扩展:采用分布式架构,将检索任务分布到多个节点上,实现水平扩展。这可以通过将索引数据......
  • 1.2贪心算法
    算法理解每次做决策时总是采取当前最优策略,从局部最优到整体最优贪心的证明呜呜呜,我不会贪心的特征1.贪心选择特征每次选择可能依赖于以前的选择但不依赖于后面的选择,要证明它,就要证明它满足局部最优到整体最优,好像又证回去了2.最优子结构性质一个问题的最优解包含其子问......
  • 代码随想录算法day7 - 字符串1
    题目1344.反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。示例1:输入:s=["h","e","l","l","o"]输出:["o","l","l","e",&qu......