首页 > 其他分享 >O(1) 修改的 RMQ

O(1) 修改的 RMQ

时间:2024-07-16 20:41:27浏览次数:9  
标签:大块 RMQ frac 分块 攒够 修改 散点

前天 uq 里有人问这个。
单点修改区间 \(min\),能不能做到修改 \(O(1)\) 查询 \(O(\sqrt n)\)。
后来和 @critno 私下讨论了一会,得到了 \(O(1)\) 修改 \(O(n^{\epsilon})\) 查询的算法,并进行了简化版的实现。
算法本质是操作序列分块。


先考虑一个朴素算法。
原序列不动,跑 RMQ。
每当有一个询问加入时,视作散点单独计算。
当我们攒够 \(O(\sqrt n)\) 个散点的时候就把这些散点视作一个块,排个序然后跑 RMQ。
攒够 \(O(\sqrt n)\) 个块之后就整体重构。

这里有一个小问题,加入一个散点的同时也意味着要删除某个位置的数。
所以我们的 RMQ 需要支持 \(O(n)\) 预处理和 \(O(1)\) 删除一个数(把某个位置的值变成 \(+\infin\))
这个可以使用多层分块实现。
块内排序,维护一个指针指向最小值。
删数采用延迟删除,打个 \(tag\)。
查询的时候再移动指针即可。
删除均摊 \(O(1)\),查询 \(O(n^{\epsilon})\)。

同时我们发现一个数至多出现在一个块里(因为每次先删除再加入)
所以修改复杂度均摊 \(O(1)\)。

至于查询,需要遍历每一个块,二分,最后再扫一遍散点。
二分可以使用分散层叠优化,最后得到复杂度 \(O(n^{\frac{1}{2} + \epsilon})\)。

排序需要使用基数排序。
在多层分块层数 \(O(1)\) 的情况下基数排序的复杂度也是线性。


考虑优化。
我们全新推出了中块,大块和超大块。
长度分别为 \(O(n^{\frac{1}{4}})\),\(O(n^{\frac{2}{4}})\),\(O(n^{\frac{3}{4}})\)。
攒够 \(O(n^{\frac{1}{4}})\) 个散点即可兑换一个中块,攒够 \(O(n^{\frac{1}{4}})\) 个中块即可兑换一个大块,攒够 \(O(n^{\frac{1}{4}})\) 个大块即可兑换一个超大块。
攒够了 \(O(n^{\frac{1}{4}})\) 个超大块我们再重构。

不难发现其实就是把操作序列上的分块改成多层分块。
上述算法的其他部分不用改。
查询复杂度降低至 \(O(n^{\epsilon})\)。


由于多层分块的实现比较复杂,我们只测试了 \(层数=2\),即普通分块的情况。
提交记录
这个题修改次数过少,为了充分测试重构的正确性将块长调整至 \(O(n^{\frac{1}{4}})\)。


参考文献:

  1. uq

标签:大块,RMQ,frac,分块,攒够,修改,散点
From: https://www.cnblogs.com/-Houraisan-Kaguya/p/18306073

相关文章

  • python在库的基础上修改
    问题想在引用库的基础上简单修改里面的内容。方法把库函数拷贝到本地进行修改。找到库函数库函数的下载路径跟系统设置、win还是linux、是否是虚拟环境都有关。这里以linux系统、有虚拟环境为例:/home/用户名/anaconda3/envs/虚拟环境名/lib/python版本(例如python3.8)/site-pa......
  • 《使命召唤16:现代战争》风灵月影修改器全面使用攻略:体验真正的现代战争
    使用《使命召唤16:现代战争》的风灵月影修改器可以极大地改变游戏体验,提供一系列强大的功能,从无限生命到超级精准度等。以下是一个全面的使用攻略,帮助你更好地掌握和运用这些修改器功能:准备阶段1.下载与安装:•从可信赖的网站下载适用于《使命召唤16:现代战争》的风灵月影修......
  • 安卓MT管理器v2.16.2/逆向修改神器 本地VIP已解锁
    MT管理器是一款强大的文件管理工具和APK逆向修改神器。如果你喜欢它的双窗口操作风格,可以单纯地把它当成文件管理器使用。如果你对修改APK有深厚的兴趣,那么你可以用它做许许多多的事,例如汉化应用、替换资源、修改布局、修改逻辑代码、资源混淆、去除签名校验等,主要取决于你如......
  • 修改ssh终端显示主机名格式
    显示参数表 参数作用\d代表日期,格式为weekdaymonthdate,例如:“MonAug1”\H完整的主机名称\h仅取主机的第一个名字,如上例,则为fc4,.linux则被省略\t显示时间为24小时格式,如:HH:MM:SS\T显示时间为12小时格式\A显示时间为24小时格式:HH:MM\u当前用户的......
  • 基于web的宠物商城设计与实现 毕业论文终稿+初稿+修改版论文+开题报告+答辩PPT+论文检
    !!!有需要的小伙伴可以通过文章末尾名片咨询我哦!!! ......
  • 侠之道风灵月影修改器详尽指南——掌握使用技巧与提升游戏体验
    《侠之道》是一款深受玩家喜爱的武侠题材游戏,其复杂的策略战斗系统和丰富的剧情线吸引了无数玩家。然而,对于那些想要更深入探索游戏内容,或是希望调整游戏难度以适应个人游戏风格的玩家来说,使用修改器是一种常见的做法。本文将详细介绍《侠之道》风灵月影修改器的使用方法,并分享......
  • Win7电脑修改网卡配置连接千兆网络的方法
    Win7电脑修改网卡配置连接千兆网络的方法RealtekPCIeGBEFamilyController是千兆网卡,GBE的意思就是1Gbps网卡,也就是千兆网卡,翻译成中文就是瑞昱PCI-E总线千兆网络系列控制器。目前有很多的电脑都是使用realtek网卡的,当时奇怪的是网卡连接到h3或者d-link千兆交换机的时......
  • mysql命令行操作显示表属性的类型与修改
        随着工具的进步,类似于Navicat这些可以让mysql具备可视化的软件越来越多。但是为了安全性,并非每一个都可以使用这些工具进行连接,因此掌握一定的mysql命令基础是必备的,本文主要是讲述一下如何查看表中,各个属性的类型,以及如何对其进行修改操作。一:对表进行查询  ......
  • git冲突发生原因-两个人同时对文件的同一部分进行了修改
    在甲负责分支 b 的开发,每次修改后推送到远程分支,乙需要将远程分支 b 拉取更新到本地进行测试,并且乙不修改分支 b 的情况下,通常不会产生冲突。这是因为冲突通常发生在不同的人对同一个文件的同一部分进行了不同的修改,而乙只是在拉取和合并更新,并不进行修改。再解释的专业一......
  • 使用K8S部署的禅道怎么修改不使用容器自带的数据库而使用其他数据库
    使用K8S部署禅道参考https://www.cnblogs.com/minseo/p/17870641.html如果想要使用不使用容器内自带的数据库修改配置文件找到pvc原始文件位置修改配置文件修改以下配置文件#zentao/config/my.php修改数据库的地址,设置用户名和密码<?php$config->installed=......