首页 > 其他分享 >莫队小计

莫队小计

时间:2024-04-29 14:22:42浏览次数:19  
标签:复杂度 len 小计 sqrt 块长 例题 莫队

莫队

考虑一个经典的问题。对一个数列进行 \(m\) 次区间求和。暴力需要 \(O(nm)\),但是莫队可以优化到 \(O(n\sqrt m)\)。

思想具有启发式思维。假如我们知道 \([l,r]\) 的和为 \(k\)。在此基础上 \([l-1,r],[l,r+1]\) 都可以很快得到。莫队是对上一个问题解决这个问题。要给对问题的求解一个顺序,否则 \(l,r\) 的移动在最坏情况都是 \(n\)。用分块的思想排序,设块长为 \(len\)。把 \(l\) 的块编号按第一关键字,\(r\) 为第二关键字排序。这样,\(l\) 移动次数为 \(len\times m\),\(r\) 移动次数为 \(\frac{n^2}{len}\)。均值不等式求得 \(len = \sqrt \frac{n^2}{m}\)。 在莫队中,块长对于复杂度有决定性的作用

小优化

  1. 对于块编号 \(id\),使用数组存储。
  2. 对于奇数块,\(r\) 升序;偶数块,\(r\) 降序。

回滚莫队

很多时候我们只方便加,或只方便减。以下考虑只加不减。

回观普通莫队,对于每次询问。\(l\) 都可能减。但是只要还在一个块。\(r\) 只会增加。

我们需要在每次询问时,将 \(l\) 只加不减。修改为当前块的右端点 \(+1\)。在当前块变化时,将 \(r\) 修改为当前块的右端点。

然后按照普通莫队求解,但是这时候 \(l\) 的操作是临时的,不要覆盖可以重复使用的区间答案。按照普通莫队的分析方法可证复杂度 \(O(n\sqrt m)\)。

例题 JOISC 2014 Day1 历史研究.

树上莫队

一般都是将树的括号序跑下来。在这上面做莫队。例题:COT2 - Count on a tree II

标签:复杂度,len,小计,sqrt,块长,例题,莫队
From: https://www.cnblogs.com/yfzqwq/p/18165631

相关文章

  • Oracle 小计-汇总处理
    假设我们有一个名为employees的表,它包含部门(department)、员工姓名(employee)和工资(salary)CREATETABLEemployees(departmentVARCHAR2(50),employeeVARCHAR2(50),salaryNUMBER(10,2));初始化数据INSERTINTOemployees(department,employee,salary)VAL......
  • 回滚莫队
    简介:远看是莫队(\(r\)),近看是暴力(\(l\),以及左右端点在同一块)。还记得普通莫队里面怎么说的吗?注意两个操作有时候会西掉一个,有时候还要在数据结构上操作,但这不在这篇文章的范围内。所以,这篇文章就会讲述如何应对“两个操作西掉一个”的情况。删除西掉了(更加常见)和正常莫队的排......
  • 正常莫队
    简介:原汁原味。区间不同数字数量\(N\le10^5,Q\le10^5,A_i\le10^9\)。我们当然可以暴力,时间复杂度\(O(QN)\)。Improvment1我们离散化,然后区间\([l,r]\)可以快速扩展到\([l-1,r],[l+1,r],[l,r-1],[l,r+1]\)。维护扩展中新来的信息。具体怎么从某......
  • 莫队-目录
    这个算法有多个变体。如果你只需要某些变体,点开这些变体的页面即可。这个算法有多个变体。如果你只需要某些变体,点开这些变体的页面即可。这个算法有多个变体。如果你只需要某些变体,点开这些变体的页面即可。普通莫队......
  • 分块莫队——维护队列
    题目描述样例输入2312Q12R12Q12样例输出21题目分析首先它是一个离线莫队(在线超时QAQ)离线首先存下它所有的询问和修改,分别存,询问要存下是第几次,以便后续输出,还要存下时间是第几个命令,比较询问和修改的时间,相应的变换颜色,最后整体输出#include<bits/stdc++.h>......
  • P4168 [Violet] 蒲公英 (莫队的强制在线)
    前言当个乐子看就行所用时间不如分块正解快虽然在线莫队实质也是分块[Violet]蒲公英题目背景亲爱的哥哥:你在那个城市里面过得好吗?我在家里面最近很开心呢。昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也被它杀掉了。我......
  • CF1957E 做题小计 : 威尔逊定理
    被数论虐爆了(悲)威尔逊定理\(\forallp\inprime,(p-1)!\equiv-1(\bmodp)\)为什么啊?对于\(2\)很显然。对于\(p\),我们知道\(inv(p-1)=p-1=-1\),然后\(inv(1)=1\)然后因为\(p\inprime\),所以对于任意\(a\in[2,p-2]\),都有\(inv(a)\)与它唯一对应。因为\(......
  • [BZOJ4358]permu树上莫队
    先放代码晚上补(争取)#include<bits/stdc++.h>#definefo(x,y,z)for(int(x)=(y);(x)<=(z);(x)++)#definefu(x,y,z)for(int(x)=(y);(x)>=(z);(x)--)typedeflonglongll;usingnamespacestd;inlineintqr(){ charch=getchar();intx=0,f=1; for(;ch<&......
  • arc166D 做题小计
    线段树做法,拿下你谷最劣解。题意翻译很形象,就不说了。思路最大化最小值,我们很容易想到二分答案。很容易发现,答案具有单调性。我们二分一个答案\(x\),强制每次使用的区间长度都不小于\(x\),然后判断可行性。现在问题转化为怎么判断一个答案\(x\)是否可行。我们发现,如果枚......
  • C117 莫队配合 bitset P4688 [Ynoi2016] 掉进兔子洞
    视频链接:C117莫队配合bitsetP4688[Ynoi2016]掉进兔子洞_哔哩哔哩_bilibili   LuoguP4688[Ynoi2016]掉进兔子洞//莫队配合bitsetO(n*sqrt(n))#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<bitset>usin......