热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

预处理的艺术

预处理的艺术以下默认合并答案是\(O(1)\)的\(O(n\alpha(n))-O(1)\)的ST表这个非常\(naive\),对于规模为\(O(n)\)的问题,我们以\(O(\l

预处理的艺术

以下默认合并答案是 \(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\) 可能有点实际意义,其他的取值都不太有用。(你这个东西有用吗



推荐阅读
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 卷积神经网络(CNN)基础理论与架构解析
    本文介绍了卷积神经网络(CNN)的基本概念、常见结构及其各层的功能。重点讨论了LeNet-5、AlexNet、ZFNet、VGGNet和ResNet等经典模型,并详细解释了输入层、卷积层、激活层、池化层和全连接层的工作原理及优化方法。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • 深度学习理论解析与理解
    梯度方向指示函数值增加的方向,由各轴方向的偏导数综合而成,其模长表示函数值变化的速率。本文详细探讨了导数、偏导数、梯度等概念,并结合Softmax函数、卷积神经网络(CNN)中的卷积计算、权值共享及池化操作进行了深入分析。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 帝国CMS多图上传插件详解及使用指南
    本文介绍了一款用于帝国CMS的多图上传插件,该插件通过Flash技术实现批量图片上传功能,显著提升了多图上传效率。文章详细说明了插件的安装、配置和使用方法。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • Win11扩展卷无法使用?解决扩展卷灰色问题的指南
    本文详细介绍了在Windows 11中遇到扩展卷灰色无法使用时的解决方案,帮助用户快速恢复磁盘扩展功能。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 智能车间调度研究进展
    本文综述了基于强化学习的智能车间调度策略,探讨了车间调度问题在资源有限条件下的优化方法。通过数学规划、智能算法和强化学习等手段,解决了作业车间、流水车间和加工车间中的静态与动态调度挑战。重点讨论了不同场景下的求解方法及其应用前景。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 深入理解Java字符串池机制
    本文详细解析了Java中的字符串池(String Pool)机制,探讨其工作原理、实现方式及其对性能的影响。通过具体的代码示例和分析,帮助读者更好地理解和应用这一重要特性。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
author-avatar
与人无缘-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有