首页 > 其他分享 >Gym103687D The Profiteer:回滚莫队信息双指针可以做到线性对数

Gym103687D The Profiteer:回滚莫队信息双指针可以做到线性对数

时间:2023-08-19 23:25:08浏览次数:36  
标签:Gym103687D 回滚 Profiteer 复杂度 信息 指针 莫队 mathrm

标题写得好

所谓的回滚莫队信息意思是,设信息保存在两个大小分别为 \(a, b\) 的结构上,将这两个信息进行合并得到大小为 \(a + b\) 的信息需要的时间为 \(\Omega(\min\{a, b\}\cdot f(n))\);而给定一个大小为 \(1\) 的信息,可以在 \(\mathrm O(f(n))\) 时间内将它加入到任何一个结构中,得到新的结构的信息。换句话说,这是一种可以支持加入,但是不支持合并(合并开销不如一个一个加入)的信息。一个例子是颜色出现个数的最大值(《历史的研究》),另一个例子是 \(m = \Omega(n)\) 条件下的背包问题(例题)。

双指针的意思是:给定一个序列长度为 \(n\),对于每一个 \(l\in[1, n]\),我希望求出第一个 \(r\ge l\) 使得区间 \([l, r]\) 的信息具有某种特性,记这个问题的答案为 \(f(l)\)。保证 \(\forall l_1 < l_2\),有 \(f(l_1)\le f(l_2)\),也就是问题的答案单调上升。对于莫队信息(支持删除),我们有尺取法可以在 \(\mathrm O(n)\) 时间复杂度内解决这个问题(以下假设信息合并时间为 \(\mathrm O(1)\));对于支持快速合并但是不能删除的信息,我们有 baka's trick 即双栈法可以在同样时间复杂度下解决问题。现在,对于回滚莫队信息,快速解决双指针问题,也可以做到吗?

首先回顾回滚莫队,它可以解决给出序列上 \(m\) 个区间,要求询问区间内回滚莫队信息的问题,时间复杂度为 \(\mathrm O(n\sqrt{m})\)。即使询问区间满足左右端点单调性相同,上述问题也只能做到 \(\Omega(n\sqrt{m})\)。以相似的思路,我们对于双指针问题很容易基于分块给出 \(\mathrm O(n^{1.5})\) 的做法。那么存在更优做法吗?

对于序列进行整体二分。设当前状态为 \((l, r, L, R, X)\),表示求解区间 \([l, r]\) 内所有 \(f(i)\),并且已知它们的范围是 \([L, R]\)。\(X\) 表示区间外信息,即若 \(r < L - 1\) 则 \(X\) 表示区间 \([r+1, L-1]\) 的信息。接下来,考虑取 \(P = \lfloor\dfrac{L+R}2\rfloor\)。我们需要找到一个最大的 \(p\in[l, r]\),使得 \(f(p)\le P\)。那么直接枚举即可,分治层数是 \(\mathrm O(\log n)\),每一层的 \([l, r]\) 和 \([L, R]\) 都不交,所以总复杂度是 \(\Theta(n \log n)\)。

未完待续。

标签:Gym103687D,回滚,Profiteer,复杂度,信息,指针,莫队,mathrm
From: https://www.cnblogs.com/kyeecccccc/p/17643098.html

相关文章

  • ef.core 事务不回滚的我遇到的一种情况分享
    比如有几个Repository:_storeRep,_inventoryRep,_storeItemRep。基类封装有BeginTransaction(); using(vartrans=_storeItemRep.BeginTransaction()){try{_storeRep.UpdateRange(...);_inventoryRep.Add(...);_storeItemRep.Add(...);_stroeRep.saveChange();_inventoryRe......
  • 10.ReplicaSet手动蓝绿部署、滚动发布、回滚及Deployment自动滚动发布、回滚及金丝雀
    Kubernetes的控制器Kubernetes的控制器类型◼打包于ControllerManager中内置提供的控制器,例如ServiceController、DeploymentController等◆基础型、核心型控制器◆打包运行于kube-controller-manager中◼插件或第三方应用的专用控制器,例如Ingress插件ing......
  • event 10513将禁止smon进程进行事务回滚
    Oracle参数之event10513发布时间:[2012-4-10]    来源:    作者:    点击:我们设置Oracle参数event10513将禁止smon进程进行事务回滚。在进行troubleshooting时,如shutdownabort后设置该速度可以加快数据库的open速度,注意加快速度的同时,也可能带来数据库一致性问......
  • 5.交互式测试客户端及滚动更新、回滚、pod扩缩容
    创建一个专用的交互式测试客户端:拉取镜像kubectlrunclient-$RANDOM--image=ikubernetes/admin-box:v1.2--restart=Never-it--rm--command--/bin/bashroot@client-12383/#在默认名称空间下的服务去访问另一个名称空间下的服务查看另一个名称空间[root@K8s-master01......
  • EAS_在controllerBean中调用其他方法,发生异常后,事务没有回滚
    首先列出例子如下:在一个方法中,执行了多个逻辑,第一部分是调用退票逻辑,第二部分是执行其他业务,这里我们遇到问题,退票逻辑执行成功,但是后面的代码异常,这时我们需要的是退回所有执行,这时我们就需要认清facade中的事务属性: 就是EJB规范的6种事务属性:Required:要求有事务:如果已......
  • git 回滚操作
    Git撤销&回滚操作(gitreset和getrevert)Git的工作流工作区:在gitaddxx之前,在自己当前分支所修改的代码内容!暂存区:已经gitaddxxx进去,且没有执行gitcommitxxx的。本地分支:已经gitcommit-mxxx提交到本地分支的。远程分支:gitpushoriginHEAD:refs/for/ma......
  • Spring管理事务默认回滚的异常是什么?
    问题:Spring管理事务默认(即没有rollBackFor的情况下)可以回滚的异常是什么? 回答:RuntimeException或者Error。抛出运行时异常,是否回滚?Yes@TransactionalpublicbooleanrollbackOn(Throwableex){returnnewRuntimeException();}抛出错误,是否回滚? Yes@Transact......
  • mysql 事务自动回滚
    MySQL事务自动回滚在MySQL数据库中,事务是一组原子性操作的集合,它们要么全部成功执行,要么全部失败回滚。事务可以保证在并发环境下数据的一致性和完整性。当一个事务执行出现错误或异常时,数据库会自动回滚到事务开始之前的状态,保证数据的完整性。事务的基本概念在MySQL中,事务由以......
  • java回滚已提交的事务
    Java回滚已提交的事务在Java中,事务是一组数据库操作的逻辑单元,它要么全部成功执行,要么全部失败回滚。通常情况下,事务会被提交,也就是将数据库的更改持久化到磁盘上。然而,有时候我们可能需要撤销已提交的事务,这就是事务回滚。事务回滚的概念事务回滚是指将已提交的事务的所有更改......
  • 阿里云ECS服务器回滚服务器遇到的一些问题
    由于阿里云的ECS服务器系统盘快被占满了,清理垃圾也不理想,幸好早一些时间对系统盘有快照备份.于是进行了快照回滚。回滚后网站无法访问,安装的宝塔也是,通过VNC远程登陆,发现服务器端口正常,阿里云安全组也没问题,想到可能是阿里云服务器本身的一些问题。于是联系了客服。通过在......