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

news/2025/10/2 10:48:10/文章来源:https://www.cnblogs.com/zhr0102/p/19123173

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.mzph.cn/news/924810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP32与SPI网口芯片DM9051ANX模块硬件引脚接法与ESP-IDF设定参数

ESP32与SPI网口芯片DM9051ANX模块硬件引脚接法与ESP-IDF设定参数ESP32与SPI网口芯片DM9051ANX模块硬件引脚接法与ESP-IDF设定参数ESP32 C3模块与DM9051ANX开发版1.开发版引脚接法 1.) 以合宙ESP32 C3 开发版连接DM9051…

医院网站建设哪家好wnmp搭建wordpress

作者:Lalit Satapathy, Ishleen Kaur, Muthukumar Paramasivam Elastic SQL 输入(metricbeat 模块和输入包)允许用户以灵活的方式对许多支持的数据库执行 SQL 查询,并将结果指标提取到 Elasticsearch。 本博客深入探讨了通用 SQL …

聚变堆:中国BEST装置全面开建

聚变堆:中国BEST装置全面开建 2025 年,中国在核聚变能源商业化道路上又迈出关键一步——紧凑型聚变能实验装置(BEST, Burning plasma Experimental Superconducting Tokamak)项目全面进入工程总装阶段,并于昨日(…

如何用pivotby函数实现数据透视(2)

********************************************************** ***2. 那如何统计出各学院各专业落实去向的人数呢*** ********************************************************** 理论跟步骤1是一样,只是count的是D…

2025 年彩钢板厂家 TOP 企业品牌推荐排行榜,复合彩钢板,保温彩钢板,耐腐蚀彩钢板,净化彩钢板推荐这十家公司!

在建筑、家电、交通等众多行业蓬勃发展的当下,彩钢板作为一种多功能且应用广泛的材料,其市场需求持续攀升。然而,当前彩钢板行业也面临诸多问题。一方面,市场上彩钢板产品质量参差不齐,部分小厂家为降低成本,采用…

AT_agc020_d [AGC020D] Min Max Repetition

比较牛逼的一个题目。 首先分类讨论是不可能的,一辈子都不可能的。 考虑这个串的结构会变成什么样子,相当于前面一半 \(A\) 尽量放在前面且尽量多,后面一半 \(B\) 的数量多。 首先注意到这个连续段的最大值是有一个…

深入解析:ECMAScript 2025 有哪些新特性?

深入解析:ECMAScript 2025 有哪些新特性?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

微信020网站怎么建立58同城兰州网站建设

一.环境搭建 1.下载地址 靶机下载地址:https://download.vulnhub.com/dc/DC-9.zip 2.虚拟机配置 设置虚拟机为nat,遇到错误点重试和是 开启虚拟机如下图所示 二.开始渗透 1. 信息收集 查找靶机的ip地址 arp-scan -l 发现靶机的ip地址为192.168.11…

北京做网站哪家强职业培训机构

元二分搜索(Steven Skiena 在《算法设计手册》第 134 页中也称为单边二分搜索)是二分搜索的一种修改形式,它以增量方式构建数组中目标值的索引。与普通二分搜索一样,元二分搜索需要 O(log n) 时间。 元二分搜索,也称为…

怎么用手机做网站编辑品牌创意设计

JavaScript数组的 forEach()方法调用数组中的每个元素。语法array.forEach(callback[, thisObject]);下面是参数的详细信息:callback : 函数测试数组的每个元素。thisObject : 对象作为该执行回调时使用。返回值:返回创建数组。兼容性:这种方法是一个Jav…

题解:P7810 [JRKSJ R2] Upper

题目描述 有 \(n\) 张扑克,第 \(i\) 张扑克上写有一个正整数 \(a_i\)。 现在要把扑克划分成若干个合法的连续子段,其中,一个连续子段 \([l,r]\)“合法”当且仅当这个子段同时满足两个条件:\(a_l< a_r\) \(\gcd(…

网站关键词排名消失动漫设计与制作好学吗

Spring Data REST 提供了一种简单的方式来暴露 JPA 实体为 RESTful 服务&#xff0c;这使得构建基于 REST 的数据服务变得非常快速和高效。下面是一个使用 Spring Data REST 构建通用架构的基本示例&#xff1a; 首先&#xff0c;我们需要创建一个实体类&#xff08;例如&…

记录自己被AWS坑了6刀

AWS(Amazon Web services) 亚马逊云坑了我6刀。我被AWS反向薅羊毛了$6美元。 我试用了AWS的一年免费EC2服务器。 上个月开启了一个 load balancer ,我以为它和 cloudfront 一样是只按流量收费的,想不到 load balance…

Spring 框架中 ​​RestTemplate 的使用方法​​ - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

桂林新站优化网站模板后台怎么做

输入一个英文句子&#xff0c;翻转句子中单词的顺序&#xff0c;但单词内字符的顺序不变。为简单起见&#xff0c;标点符号和普通字母一样处理。例如输入字符串"I am a student. "&#xff0c;则输出"student. a am I"。 示例 1&#xff1a; 输入: "…

tnkstat3e-merge-0

统计思维(程序员的概率统计)第三版(一)原文:allendowney.github.io/ThinkStats/index.html 译者:飞龙 协议:CC BY-NC-SA 4.0统计思维第三版原文:allendowney.github.io/ThinkStats/index.htmlThink Stats 是面…

如何用pivotby函数实现数据透视(1)

背景 ========================================================================================= 因为每次都要统计当前毕业的毕业去向落实率,每次都在拉两次透视表,做N次VLOOPUP,再写一个求百分比的公式, ---…

网站建设 拖欠尾款水果建设网站前的市场分析

指针初阶 1.指针是什么2.指针和指针类型2.1 指针-整数2.2 指针的解引用 3.野指针3.1 野指针成因3.2如何避免野指针 4.指针运算4.1 指针-整数4.2 指针-指针4.3 指针的关系运算 5.指针和数组6.二级指针7.指针数组 1.指针是什么 指针是什么&#xff1f; 指针理解的2个要点&#xf…

JavaScript零基础入门速通(完整) - 指南

JavaScript零基础入门速通(完整) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

企业为什么做平台网站企业网站建设的实验报告

准备工作 这部分其实在谷歌或者百度上搜索下就可以完成的&#xff0c;可是我就是想再啰嗦一遍&#xff0c;说不定有比我更懒的同学呢哈哈~ 第一步 Python的安装配置 打开官网: https://www.python.org/downloads/ 目前官网上已经更新到3.6.1啦&#xff08;这更新速度我是服的&…