首页 > 其他分享 >NOIP 前的复习乱写

NOIP 前的复习乱写

时间:2022-09-18 13:12:46浏览次数:89  
标签:frac 复习 NOIP 乱写 复杂度 sqrt 升序 移动 莫队

莫队

询问是二维的莫队

把询问抽象成平面上的点 \((x,y)\),那么处理两个询问间的指针移动就是两点之间的曼哈顿距离。

我们需要构造一个处理点的顺序来使得指针移动和尽量小。

将 \(x\) 轴按照 \(O(B)\) 块长分为 \(O(\frac{n}{B})\) 块,将点按照 \(x\) 所在块编号升序排序,同一块内按照 \(y\) 升序排序。

我们把点在 \(x\) 轴和 \(y\) 轴上的移动分开考虑:

对于 \(x\),在同一块内一次移动 \(O(B)\),共有 \(O(q)\) 次,跨块的移动只有 \(O(\frac{n}{B})\) 次,每次也是 \(O(B)\) 的,总移动 \(O(qB+n)\)。

对于 \(y\),在同一块内移动 \(O(n)\),共有 \(O(\frac{n}{B})\) 块,在跨块的时候移动回去也是 \(O(n)\) 的,共有 \(O(\frac{n}{B})\) 次,总移动 \(O(\frac{n^2}{B})\)。

设指针移动一单位的代价是 \(f_0\),查询代价是 \(f_1\),总时间复杂度 \(O((qB+\frac{n^2}{B})f_0+qf_1)\)。

取 \(B=O(\frac{n}{\sqrt{q}})\) 得到最优复杂度 \(O(n\sqrt{q}f_0+qf_1)\)。

注意到指针移动是 \(O(n\sqrt{q})\) 的而查询只有 \(O(q)\) 次,如果 \(f_0,f_1\) 代价不为 \(O(1)\),我们可以考虑根号平衡。

考虑如何维护莫队元素集合,如果使用树状数组那么 \(f_0=f_1=O(\log n)\),总时间复杂度 \(O(n\sqrt q\log n)\)。

利用上面的原理,考虑使用 \(O(1)\) 单点加 \(O(\sqrt n)\) 区间求和的分块来平衡复杂度,总时间复杂度 \(O(n\sqrt q+q\sqrt n)\)。

其它普通莫队的难点就在于如何维护莫队元素集合。

询问是三维的莫队

把询问抽象成三维的点 \((x,y,z)\),类似二维莫队。

对 \(x\) 和 \(y\) 轴都分块,将点按照 \(x\) 轴所在块编号升序排序,同一 \(x\) 轴块内的点再按照 \(y\) 轴所在块编号升序排序,最后在同一 \(x,y\) 轴块内的点再按照 \(z\) 升序排序。

标签:frac,复习,NOIP,乱写,复杂度,sqrt,升序,移动,莫队
From: https://www.cnblogs.com/yukari1735/p/16704636.html

相关文章

  • Trie 一轮复习
    字典树字典树,顾名思义,就是一个像字典一样的树。——OI-wiki普通Trie如图:Trie用边代表字母,那么从根节点到某个节点的路径表示一个字符串。Trie支持的操作有三......
  • c语言数据结构复习
    c语言数据结构复习第1章:基本概念第2章:线性结构2.1--线性表及其实现2.1.1-引子:多项式及其表示法1:顺序存储直接表示多项式法2:用顺序存储结构表示多项式说明:以上例......
  • Java8Stream流复习和api总结
    构建方式list.stream();Stream.of(list);基础常用APIStream<Number>stream=list.stream();//获取最大值stream.max(比较器);//获取最小值stream.min(比较器);......
  • java复习随笔(十四)——类加载器、反射
    类加载器类加载当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化。如果不出现意外状况,JVM将会连续完......
  • java复习随笔(十三)——Stream流
    Stream流的生成方式Stream流的使用生成流通过数据源(集合,数组)生成流list.stream()中间操作一个流后面可以跟随零个或多个中间操作,其目的主要是打开流,做出某种程度的......
  • 复习python基础
    ......
  • 信息学奥赛一本通 1314:【例3.6】过河卒(Noip2002)
    时间限制:1000ms      内存限制:65536KB提交数:26367   通过数:11410【题目描述】棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下......
  • I [NOIP2012]开车旅行 每次往第一或者第二近的点走,求最大比值 倍增算法 set
    链接:https://ac.nowcoder.com/acm/problem/16562来源:牛客网题目描述小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较......
  • 洛谷 P1036 [NOIP2002 普及组] 选数(dfs)
    https://www.luogu.com.cn/problem/P1036题目大意:从给定的n个数中选出m个求和,结果是一个素数的情况有多少种?输入43371219输出1这个题目的代码是根据Acwing中......
  • 青少年C++编程CSP/NOIP
    C++基础篇C++算法篇数据结构&算法深入信息学竞赛初赛篇信息学竞赛复赛篇信息学等级考试篇C++提高篇https://study.163.com/series/1202896601.htm?inLoc=android_ss_ssjg&u......