首页 > 其他分享 >[学习笔记] 莫队

[学习笔记] 莫队

时间:2023-09-02 14:34:13浏览次数:37  
标签:dfrac 复杂度 笔记 学习 端点 mL 莫队 询问

一、普通莫队

莫队是一种基于分块的算法,由莫队提出(orz)。

莫队可以解决一类查询序列区间信息的题。

可以使用该算法的 前提 是维护的信息必须可以在 \(O(1)\)(如果用 map / set 可以带 \(\log\),或者优化成 \(O(1)\))内将 \([l, r]\) 的答案扩展到 \([l - 1, r], [l + 1, r], [l, r - 1], [l, r + 1]\)。

  • 将序列分块,并将所有询问离线。然后将左端点所在的块的编号作为第一关键字,右端点作为第二关键字,将询问排序。

  • 记 \(q_i\) 为第 \(i\) 个询问,\(m\) 为询问个数,那么我们暴力的从 \(q_1\) 改到 \(q_2\),从 \(q_2\) 改到 \(q_3\),一直改到 \(q_m\)。

  • 分析时间复杂度。设块长为 \(L\),假定扩展区间复杂度为 \(O(1)\);左端点在一个块内的询问,移动最多 \(n\) 次,有 \(\dfrac{n}{L}\) 块,所以这部分的复杂度为 \(O\left(\dfrac{n^2}{L}\right)\),因为这样每次改可能跨越块,所以这部分的复杂度为 \(O(mL)\),总复杂度 \(O\left(\dfrac{n^2}{L} + mL\right)\)。我们要让这个式子尽可能小,所以要让这两项相等,即 \(\dfrac{n^2}{L} = mL\),解得 \(L = \dfrac{n}{\sqrt{m}}\),时间复杂度 \(O(n\sqrt{m})\)。

标签:dfrac,复杂度,笔记,学习,端点,mL,莫队,询问
From: https://www.cnblogs.com/RB16B/p/17673643.html

相关文章

  • 虚拟机VMware与乌班图的安装 -- 正点原子嵌入式Linux学习
    一、准备工作1、虚拟机VMware的下载官网下载地址:DownloadVMwareWorkstationPro2、linux乌班图的下载官网下载地址:下载Ubuntu桌面系统|Ubuntu二、虚拟机VMware的安装过程1、点击第一步下载好的虚拟机安装文件,选择自定义,后点击下一步2、点击稍后安装3、选择Linux......
  • Python初级学习20230902——元组
    """example04-初步学习Python1.学习元组tuple2.元组的应用Author:danlisDate:2023/9/2"""#START1学习元组tuple#元组是不可变的容器*#str=(100)#这实际上class'int',所以如果需要构造一元组,必须后面加,str=(100,)str1=(100,)print(type(str1))#重复......
  • windows10,编译rust程序到so文件,供android调用,笔记
    1、用D:\myProgram\android_sdk\ndk\ndk-22.0.7026061\ndk-build.cmd编译,全路径,只写ndk-build,似乎不行2、在androidas里编译,提示soisnotaABI,其实是so放错地方了。应该放在src\main\jniLibs\arm64-v8a目录下(其他cpu类似),我就是缺少arm64-v8a目录,导致这个错误,新建arm64-v8......
  • Python初级学习20230901
    Python初级学习20230901运算符--->优先级和结合性左结合:从左往右进行计算(大部分运算符)右结合:从右往左进行计算(赋值运算符,正负号,索引和切片)assert断言语句a=1asserta==1#后面可以不加asserta==1,'这里写的是如果出错时的提示语句,AssertionError:内容'容器型数......
  • 8.28-9.3学习总结博客八:数据工程与系统部署
    博客题目:学习总结八:数据工程与系统部署实践内容概要:了解数据工程的基本概念和核心技术,学习如何将学到的技能应用于实际项目中,并了解数据处理系统的设计和部署。学习资源:推荐的数据工程、系统部署和项目实践的教程、实践资源和学习资料。实践内容:通过针对实际项目的数据处理和系统......
  • 『学习笔记』狄利克雷生成函数
    定义一般地,对于一个函数\(f\),定义它的狄利克雷生成函数(简写为DGF)为:\[\tilde{F}(x)=\sum_{i\ge1}^\infty\dfrac{f_i}{i^x}.\]即:\[\tilde{F}(x)=f_1+\dfrac{f_2}{i^2}+\dfrac{f_3}{i^3}+\dfrac{f_4}{i^4}+\cdots.①\]性质若\(f\)是积性函数,则一定满足:......
  • 《C++并发编程实战》读书笔记(1):线程管控
    1、线程的基本管控包含头文件<thread>后,通过构建std::thread对象启动线程,任何可调用类型都适用于std::thread。voiddo_some_work();structBackgroundTask{voidoperator()()const;};//空的thread对象,不接管任何线程函数std::threadt1;//传入普通函数std::thr......
  • 前端学习笔记202308学习笔记第七十捌天-Map之8
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Map</title></hea......
  • 前端学习笔记202308学习笔记第七十捌天-Map之7
         ......
  • 前端学习笔记202308学习笔记第七十捌天-Map之5
       对象没有可迭代协议......