双栈维护头尾操作

是如下的数据结构。

我们需要支持头尾增删,以及全局查询的操作。

蠢笨的做法是使用线段树分治,但会多 log,使用双栈可以做到线性。

操作如下:

  • 开两个栈 stal,star,分别处理头尾的增删

  • 增:头增 stal,尾增 star

  • 删:与增类似,但是栈空时特别处理:

    • 双栈大小之和不超过 1 特判

    • 否则将有数字的那个栈切为两半,均分到两个栈里面 注意顺序,应当是这一半倒着插入另一个栈

  • 查:合并两个栈顶信息。

时间复杂度考虑双栈大小之差 d,显然 d 增量之和不超过 n,而减量之和不超过 n,每次调整会使得 d 减小一半,均摊同样 O(n)

例题:

贪玩蓝月

利用双栈维护背包模板题。

CF2026F

对于 1,2,3 操作,都新开一个版本,然后建立操作树,这样我们每次进入一个节点都只会进行一个操作,离开时撤销这个操作,利用双栈维护背包即可。

posted @   spdarkle  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示