当前位置: 首页 > news >正文

浅谈 Bakas Trick / 不带删尺取 / 对顶栈

1. 算法介绍

1.1 普通队列

问题:维护一个队列,支持 pop_frontpush_back,查询队列内所有元素的信息和。保证该信息具有结合律。不保证该信息具有可差分性。

平凡的做法是用线段树或 ST 表维护这种不可差分的信息,然后跑双指针,时间复杂度大部分情况下会比普通双指针多一个 \(\log\)

Baka's Trick / 不带删尺取 / 对顶栈 则通过记录前后缀信息,结合均摊复杂度,在大多数情况下可以将时间复杂度减少一个 \(\log\)

具体而言,算法本质上是维护了一个对顶栈,来模拟队列的操作:

  • 假设有两个栈:\(stk1, stk2\)\(stk1\) 存出队的元素信息,\(stk2\) 存入队的元素信息。
  • 入队时,直接扔到 \(stk2\) 栈顶,并且记录 \(stk2\) 栈内的前缀信息,以方便撤销入栈。
  • 出队时:
    • \(stk1\) 内仍有元素,则直接出队,回退版本。
    • 否则说明 \(stk1\) 内没有元素,将 \(stk2\) 内的元素全部堆进 \(stk1\)
  • 查询时,直接将两个栈的前缀信息合并即可。

因为每个元素最多只会进入一次 \(stk1\),因此时间复杂度 \(O(nB)\)。其中 \(B\) 指将两个信息合并的复杂度。

三指针的写法和对顶栈本质是一样的,个人感觉对顶栈更直观。

1.2 双端队列

问题:维护一个双端队列,支持 pop_frontpop_backpush_frontpush_back,查询队列内所有元素的信息和。保证该信息具有结合律。不保证该信息具有可差分性。

和维护普通队列差不多,但是运用了一些均摊技巧。

发现难点在于删除元素的时候要把两个栈里的元素倒过来又倒回去,时间复杂度可能会爆炸。这里有一种暴力重构的方法可以解决这个问题:每次遇到删除的栈为空的时候,暴力重构另一个栈,使得当前的两个栈大小之差不超过 \(1\)

时间复杂度依然是 \(O(nB)\) 的。证明可以考虑势能分析,假设 \(\omega\) 表示当前两个栈大小的绝对值之差,则每次 push 操作最多会使得势能增加 \(1\);而每次删除操作要么使得势能增加 \(1\),要么将势能降到小于等于 \(1\)。而总共只能增加 \(q\) 的势能,所以时间复杂度依然是 \(O(nB)\) 的。

2 例题

2.1 CF1548B Integers Have Friends

2.2 LOJ P6515 「雅礼集训 2018 Day10」贪玩蓝月

2.3 AT_jag2018summer_day2_d Knapsack And Queries

2.5 UOJ P693 【UR #23】地铁规划

http://www.gsyq.cn/news/14857.html

相关文章:

  • AT_agc020_d [AGC020D] Min Max Repetition
  • 2025切割机厂家TOP企业品牌推荐排行榜,五轴水刀,大理石水刀,全自动水刀,高压水刀,手持式水刀,高压水刀,大理石水刀,便携式水刀切割机公司推荐!
  • 二十八、API之《System 类》——与框架交互的“桥梁”
  • 2025活塞杆厂家TOP企业品牌推荐排行榜,精密,不锈钢,调制,超长,油缸,气缸,镀铬,大直径,精细活塞杆推荐这十家公司!
  • 读人形机器人28智慧城市2
  • 2025加工厂家企业品牌推荐排行榜,走心机、精密细长轴、进口津上机、精密零部件、机械零件非标定制、新能源电机传动轴、紧固件、复杂零件一次成型、内外螺纹台阶轴卡簧槽键槽加工推荐
  • 2025年地磅厂家TOP企业品牌推荐排行榜,电子地磅、物联网、无人值守、汽车衡、防爆、自动称重系统、100 吨地磅、专业地磅汽车衡公司推荐!
  • 2025 年微波干燥设备厂家 TOP 企业品牌推荐排行榜,黄粉虫、黑水虻、中药材、茶叶、食品、粮食、大虾、茶叶、海产品、砂型微波干燥设备公司推荐!
  • 2025十一集训——Day1做题
  • AI元人文:价值共生体系统——构建人机文明的演进基石
  • 汽车央企“哄抢”华为
  • CF2150D
  • AI元人文:致同行者书
  • US$78 HU64 Clamp Work on Benz SN-CP-JJ-11 for SEC-E9 Key Cutting Machine
  • US$188 Tubular Key Clamps for SEC-E9 Key Cutting Machine Tubular Key Cutting
  • 子结构判断
  • 使用 Go 进行验证码识别
  • 火狐浏览器新页覆盖旧页解决方法
  • msi主板,windows11,mbr转gpt后,提示0xc000000e1,无法进入系统
  • 在疼痛中锚定前路
  • US$13 BDM FRAME Adapter Only Adapter
  • 2025年10月训练记录
  • 《电路基础》第四章学习笔记
  • US$39 PowerBox for KTM JTAG for Hitachi
  • 详细介绍:OSWorld - 多模态智能体在真实计算机环境中的开放式任务基准
  • 【Groovy】变量和基本数据类型
  • 2026届模拟/射频IC设计方向保研经验分享
  • 2021 ICPC 沈阳 BEFHJLM(待补
  • 【Groovy】Groovy环境搭建
  • 2025年TAB拉链制造商权威推荐榜:创新设计与耐用品质口碑