首页 > 其他分享 >预处理的艺术

预处理的艺术

时间:2022-09-02 14:55:27浏览次数:44  
标签:艺术 frac log ST 块间 块长 预处理

预处理的艺术

以下默认合并答案是 \(O(1)\) 的

\(O(n\alpha(n))-O(1)\) 的ST表

这个非常 \(naive\),对于规模为 \(O(n)\) 的问题,我们以 \(O(\log n)\) 为块长分块,块间建立ST表,每个点存到自己所在块端点的答案,递归到 \(O(\frac{n}{\log n})\) 个大小为 \(O(\log n)\) 的子问题,直到块长为 \(O(1)\)。

然后发现就是 \(O(n\alpha(n))\) 的预处理了,因为只会有 \(O(\alpha(n))\) 层这样的结构,现在的问题是确定询问属于那一层。

只需要预处理出对于所有可能的长度,比其恰好大的块长,这样的询问要么在块内,要么恰好在相邻的两块间,于是就 \(O(1)\) 解决了。

然后猫树和ST表没有什么区别,一样的做就可以了。

The Method of Four Russians

已经普及啦

大概就是分块,小的把所有可能的情况预处理出来,大的用数据结构块间维护。

\(\pm1\) RMQ

就是 \(a_i-a_{i-1}\in\{-1,1\}\) 的区间最值

我们发现块长设为 \(\frac{\log n}{2}\) 的话,本质不同(差分不同)的块只有 \(2^{\frac{\log n}{2}}=\sqrt n\) 种,于是可以 \(O(\sqrt n\log^2 n)\) 的暴力处理所有块内的答案,然后这个显然是不到 \(O(n)\) 的,块间建ST表就可以了。

LCA

用欧拉序,以深度为权值,转化为 \(\pm1\) RMQ

RMQ

建笛卡尔树,转化为 \(LCA\)

LA

这个不太一样,我们考虑长链剖分,

然后我们就做到了 \(O(n\log n)-O(1)\)

如果我们可以把树的大小变为 \(O(\frac{n}{\log n})\) 那不就可以了。

于是我们把大小恰好不超过 \(\frac{\log n}{4}\) 的子树减下来,系数是 \(\frac14\) 保证了不同的子树的数量不超过 \(\sqrt n\),于是又做完了。

树上问题

显然,子树询问容易转化为序列问题,于是这里主要处理链上操作。

树上并查集

就是每次把儿子并到父亲上。

我们用 \(Top\ Cluster\) 分块,块的大小为 \(O(\log\log n)\),枚举本质不同的块合并其中一个点之后会变成哪种块。

块间就同时用路径压缩和按秩合并,然后就做到线性了。

链询问

树剖(当然是轻重链剖分),重链上建猫树,维护每个点到向上所有链顶的答案,这样是 \(O(n\log n)\) 的。

现在我们需要 \(O(1)\) 确定要查到哪个链顶,这只需要从 \(lca\) 向上跳一个 \(top\) 再向下走一个就可以了。

如果我们对链顶分块,就可以做到 \(O(n\log^\epsilon n)-O(1)\) 的复杂度,不过我觉得除了 \(\epsilon=\frac12\) 可能有点实际意义,其他的取值都不太有用。(你这个东西有用吗

标签:艺术,frac,log,ST,块间,块长,预处理
From: https://www.cnblogs.com/efX-bk/p/maozi.html

相关文章

  • 数据预处理
    data.xlsx数据如下1#-*-coding:utf-8-*-2#我们必须进行数据预处理它直接关系到分析结果的准确性处理缺失值数据重复值3#检查缺失值检测缺失值最简单......
  • css预处理器
    CSS预编译工具有stylus,sass,less为什么会出现CSS预编译器这个东西呢?这就要谈到CSS的不足了:没有变量(新的规范已经支持了),不支持嵌套,编程可以力较弱,代码复使用性差。这些......
  • 决策的艺术
    提出正确的问题Problem打破常规,创造性地思考写出对问题最初的评估,质疑、检查、完善它是什么触发地这项决策?检视问题中的限制条件求助于他人求助与朋友或者相关领域地......
  • AFNI 步骤4-命令和预处理
    第一部分AFNI命令和uber_subject.py的使用略 第二部分时间矫正在扫描过程中,从第一个切片到最后一个切片之间存在一定的时间差,导致采集到的数据并不是......
  • 第一章、权衡的艺术
    小记:本章主要了解命令式、声明式、性能与可维护性的权衡、虚拟Dom的性能、运行时和编译时。Vue就是通过权衡这几种方式的优缺点进行框架设计命令式、声明式对比......
  • 阅读的艺术:主动阅读 邛亦简
    相信无数人从高中毕业之后就患上了"阅读昏睡症"。对于稍微需要费脑的专业书籍,学术论文,目光一触及文字,脑袋里的思绪就开始打结,导致脑子跟不上眼睛的速度。脑袋里只知道每个......
  • Sass预处理器 常见函数的基本使用
    Sass提供了许多内置模块,其中包含有用的函数(以及mixin)。这些模块可以像任何用户定义的样式表一样使用@use规则加载,它们的函数可以像任何其他模块成员一样调用。所有内置模块......
  • Wireshark网络分析的艺术 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1cAWKzic9t9nHu7HzFW0xnA点击这里获取提取码Wireshark是当前流行的网络包分析工具。它上手简单,无需培训就可门。很多棘手的网......
  • 获取数的全部因子 单次查询/预处理
    对于单次查询,可以直接用sqrt(n)遍历。对于多次查询,每次都遍历会遍历多个无用的数。可以采用打表法,直接获取数据范围内的全部数据的因子。代码如下:intN=100010;ve......
  • let fat tension(推公式,交换计算顺序,预处理)
    题意有\(n\)个人,每个人有两种属性,分别是\(X_i\)和\(Y_i\)。其中\(X_i\)为\(k\)维向量,\(Y_i\)为\(d\)维向量。定义\(le(i,j)=\frac{X_i\cdotX_j}{|X_i||X_j|}\),即\(X_......