热门标签 | 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等经典模型,并详细解释了输入层、卷积层、激活层、池化层和全连接层的工作原理及优化方法。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ... [详细]
  • vivo Y5s配备了联发科Helio P65八核处理器,这款处理器采用12纳米工艺制造,具备两颗高性能Cortex-A75核心和六颗高效能Cortex-A55核心。此外,它还集成了先进的图像处理单元和语音唤醒功能,为用户提供卓越的性能体验。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 如何使用 CleanMyMac X 2023 激活码解锁完整功能
    本文详细介绍了如何使用 CleanMyMac X 2023 激活码解锁软件的全部功能,并提供了一些优化和清理 Mac 系统的专业建议。 ... [详细]
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社区 版权所有