首页 > 其他分享 >莫队

莫队

时间:2024-01-31 19:14:01浏览次数:26  
标签:cnt move while Part now 莫队

Part -1 前言

本文为莫队学习笔记,如果有错误,请提出,谢谢捏。

Part 0 目录

  • 普通莫队

    • 1.形式
    • 2.算法流程
    • 3.小trik
    • 3.例题

Part 1 普通莫队

1.形式

假如说通过区间 \([l,r]\) 的答案可以 \(O(1)\) 求出 \([l - 1,r]\),\([l + 1,r]\),\([l,r - 1]\) 和 \([l,r + 1]\) 的答案那么我们求可以在 \(O(n \sqrt n)\) 的时间内解决问题。

相当于在平面直角坐标系上有 \(n\) 个散点,然后我们用莫队来串起这 \(n\) 个散点。

2.算法流程

先把所有的问题离线下来,然后以 \(l\) 所在的块的编号为第一关键字,以 \(r\) 为第二关键字。

然后求答案即可。放一个移动求答案的代码。

void solve()
{
    sort(q + 1,q + m + 1);
    for(int i = 1;i <= m;i+++)
    {
        query &now = q[i];
        while(l > now.l)
        {
            move(--l,1);
        }
        while(r < now.r)
        {
            move(++r,1);
        }//先扩大区间,防止区间变为负的
        while(l < now.l)
        {
            move(l++,-1);
        }
        while(r > now.r)
        {
            move(r--,-1);
        }//缩小区间
    }
}

3.小trik

我们知道如果按照 \(l\) 为关键字的话,莫队会走完这一行,然后回到最开头,向上走一格,然后继续走这一行。

但是我们可以直接到尽头时向上走,然后倒退回去,这样这两行只需要两次就可以遍历完。但是不这样就需要四次。

所以我们可以在奇数行的时候按照普通的,否则我们倒着排序。

4.例题

1.小Z的袜子

莫队模板题。

对于 \([l,r]\) 区间取到两个相同颜色的袜子的情况数为 \(\sum^{i\le n}_{i=1} cnt_i \times(cnt_i - 1)\)。总情况数就是 \((r - l + 1) \times (r - l)\)。

然后我们用莫队维护 \(cnt\) 即可。

code

标签:cnt,move,while,Part,now,莫队
From: https://www.cnblogs.com/Carousel/p/17999917

相关文章

  • 莫队算法/分块思想
    莫队算法/分块思想引入对于区间问题,常常会使用线段树维护,但是对于一些数据合并复杂度无法\(O(1)\)解决。所以不能使用,应当使用莫队算法。定义对于离线处理的查询问题,通过合理安排这些计算的次序,得到一个较优的复杂度例题1一个长度为\(n\)的序列,询问\(m\)次\([L,R]\)......
  • 浅谈莫队
    莫队基础莫队[SDOI2009]HH的项链这道题是卡莫队的,但是确实练习莫队的好题。首先想一下暴力:直接暴力枚举询问,然后再枚举区间,这样是O(n^2)的;想一下优化:如果说询问是按照左端点递增&&右端点递增的;那么我们就可以离线排序,用线性的时间扫过去所有询问,用桶记录一下就行,同......
  • 莫队学习笔记
    前置知识:分块莫队是非常好的数据结构,可以离线解决很多序列问题当对于一个查询\([l,r]\)可以\(O(1)\)转移到\([l-1,r],[l+1,r],[l,r-1],[l,r+1]\)时可以考虑用(普通)莫队莫队先读入所有的询问,接着离线对于所有询问区间\([l,r]\),用\(l\)所在块的编号为第一关键字,\(r\)为......
  • 莫队
    普通莫队由莫涛总结并实现。可以在\(\mathcal{O(n\sqrt{n})}\)的时间复杂度内解决不带修的区间问题。那什么样的题才能用莫队呢?最重要的特征是知道区间\([l,r]\)的答案,可以\(\mathcal{O(1)}\)得知\([l-1,r]\),\([l,r-1]\),\([l+1,r]\),\([l,r+1]\)区间的答案。先来看一个......
  • 树套树板子,但是带修莫队+值域分块
    \(\text{Link-LuoguBlog}\)原题传送门没啥重要的事情,就是终于过了这题非常开心,发现自己是莫队的时间戳部分写错了调了114514年我也只能说是十分趣味。以及今天深刻地认识到了带修莫队应该len=pow(n,0.66);。就是裸的带修莫队+值域分块,就不说了,直接放代码了昂。如果有人......
  • 莫队的时间复杂度?
    普通莫队的时间复杂度分析:设块长为\(B\),\(l\)的移动次数是\(O(mB)\)的,\(r\)的移动次数是\(O(\frac{n}{B}n)\)的,所以总时间复杂度为\(O(mB+\frac{n}{B}n)\),考虑时间复杂度的平衡,取\(B=\frac{n}{\sqrt{m}}\),则总时间复杂度为\(O(n\sqrt{m})\)。带修改的莫队的时间复杂度......
  • 算法笔记(4)莫队算法入门
    原发表于我的博客前言本来想学完回滚莫队、树上莫队、二离莫队之后一起写一个博客,但是一直学不会/kk,只好把已会的普通莫队和带修莫队写了(以后会补上的)普通莫队莫队——优雅的暴力莫队算法的引入例题:给定一个数列和若干询问,每次询问询问一段区间内不同种类数字的个数。暴力......
  • 【GJOI 2023.10.17 T4】 莫队
    莫队今天,接触信息学不久的小A刚刚学习了莫队。莫队可以解决一类难以合并,但方便插入的信息维护。比如,给定一个序列,支持单点修改,每次询问一个区间出现了多少种数字。再比如,给定一个序列,支持单点修改,每次询问区间众数。诸如此类。小A觉得这样的情况太平凡了。于是,他定义了一个......
  • 树上莫队小技巧
    前言联考有一道树上莫队一眼题,但是我还没学过树上莫队啊!!!于是开始口胡,这个东西好像是说这个东西把树拍成欧拉序,端点一移动,做完了!开始写,一下子过大样例,没有细节!然后在网上一看树上莫队的博客:大家怎么都求了LCA?为什么要分讨有祖先后代关系的情况?坏了,一定是我做法假了!!!然后往SPOJ......
  • P9233 [蓝桥杯 2023 省 A] 颜色平衡树 (dfs序 莫队)
    P9233[蓝桥杯2023省A]颜色平衡树(dfs序莫队)莫队原理:https://zhuanlan.zhihu.com/p/115243708对于树上的每个结点,按照dfs序打上时间戳,这样就可以把每一个结点对应的子树的答案转化为一个区间的答案。将子树询问离线下来变成\(n\)个区间查询。用\(cnt\)数组维护颜色......