【DS】【AtCoder】Pakencamp 2022 Day2 H
2023.6.30 Problem Link
有 \(n\) 个帮派在打架,每个帮派有一个大小 \(a_i\),每相邻两个帮派有一个仇恨度 \(b_i\)。现在有 \(Q\) 次单点修改 \(a_i\) 或者 \(b_i\),然后给出区间 \([l,r]\),询问区间 \([l,r]\) 内的帮派打架后最后剩下的那个帮派是谁。
打架的规则是:每次选出 \(b_i\) 最大的相邻两个帮派打一架,人数较多的帮派获胜(相同则编号较小的获胜),然后败者全部加入胜者的帮派。
一个经典的值域减半思想 + 一个经典的双端点二分思想。
- 时光倒流
这个操作并不优美,考虑时光倒流,每次找到 \(b_i\) 最小的相邻帮派,然后把左边和右边较小的扔掉。
- 值域减半
注意到我们扔掉的是较小的一半,这意味着中间较大的一半会留着。于是就有这么一个类似于“不变量”的东西,只有区间的和减半的时候才会改变。如果我们每次可以“快进”到“不变量”改变的时候,就可以在 \(\log V\) 乘上快进一次的时间内解决问题。
设当前区间和为 \(X\),则我们希望找出缩小后的区间 \(\le X/2\) 的最早时刻。然后注意到,如果令 \(p\) 为最小的满足 \(\mathrm{sum}[l,p]\ge X/2\) 的点,那么不断缩小中的 \([l,r]\) 会始终包含 \(p\),直至下一步就会 \(\le X/2\) 为止,然后暴力减半一步。
- 双端点二分
我们开始“二分”这个区间 \([u,d]\)。一个区间怎么二分呢?令 \(u\) 当前的区间范围为 \([l_u,r_u]\),\(d\) 当前的区间范围为 \([l_d,r_d]\),我们希望每次“二分”将 \([l_u,r_u]\) 或者 \([l_d,r_d]\) 缩小一半。考虑找出 \(mid_u\) 和 \(mid_v\),然后分 \(\mathrm{sum}[mid_u,mid_v]\) 讨论。
如果 \(\mathrm{sum}[mid_u,mid_v]\le X/2\),此时不妨设 \(\min[mid_u,r_u]<\min[l_d,mid_d]\),那么如果在 \([l_d,mid_d]\) 中砍了一刀,那 \([mid_u,r_u]\) 之间也一定被砍了一刀,那 \(d\in[l_d,mid_d]\) 一定不合法,于是 \(d\) 可以往右边递归;
如果 \(\mathrm{sum}[mid_u,mid_v]> X/2\),此时不妨设 \(\min[l_u,mid_u]<\min[mid_d,r_d]\),那么如果在 \([l_u,mid_u]\) 中砍了一刀,那 \([mid_d,r_d]\) 之间也一定被砍了一刀,那 \(d\in[l_u,mid_u]\) 一定不合法(有些边界),于是 \(u\) 可以往右边递归。
无论如何,\(u,d\) 一定有一个可以往一边递归,所以这部分时间复杂度 \(O(\log n)\)。
总时间复杂度 \(O(n\log V\log n)\)。
【DS】【AtCoder】Pakencamp 2022 Day2 H的更多相关文章
- 【Data Structure】-NO.117.DS.1 -【Tree-23树】
[Data Structure]-NO.117.DS.1 -[Tree-23树] Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total ...
- AtCoder Beginner Contest 142【D题】【判断素数的模板+求一个数的因子的模板】
D - Disjoint Set of Common Divisors Problem Statement Given are positive integers AA and BB. Let us ...
- 【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用
四个主要操作类:JsonConverter .JsonHelper .JsonSplit .AjaxResult 一.JsonConverter: 自定义查询对象转换动态类.object动态类转换j ...
- 数据库优化实践【MS SQL优化开篇】
数据库定义: 数据库是依照某种数据模型组织起来并存在二级存储器中的数据集合,此集合具有尽可能不重复,以最优方式为特定组织提供多种应用服务,其数据结构独立于应用程序,对数据的CRUD操作进行统一管理和控 ...
- Python开发【第二十二篇】:Web框架之Django【进阶】
Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...
- 【MyBatis源码分析】select源码分析及小结
示例代码 之前的文章说过,对于MyBatis来说insert.update.delete是一组的,因为对于MyBatis来说它们都是update:select是一组的,因为对于MyBatis来说它就是 ...
- 【C#公共帮助类】JsonHelper 操作帮助类
四个主要操作类:JsonConverter .JsonHelper .JsonSplit .AjaxResult 一.JsonConverter: 自定义查询对象转换动态类.object动态类转换js ...
- [置顶] 数据库优化实践【MS SQL优化开篇】
数据库定义: 数据库是依照某种数据模型组织起来并存在二级存储器中的数据集合,此集合具有尽可能不重复,以最优方式为特定组织提供多种应用服务,其数据结构独立于应用程序,对数据的CRUD操作进行统一管理和控 ...
- NOIP2016天天爱跑步 题解报告【lca+树上统计(桶)】
题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 nn个 ...
- (43). Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...
随机推荐
- SimpleDateFormat线程不安全了?这里有5种解决方案
摘要:我们知道SimpleDateFormat是线程不安全,本文会介绍多种解决方案来保证线程安全. 本文分享自华为云社区<java的SimpleDateFormat线程不安全出问题了,虚竹教你多 ...
- App加固中的代码混淆功能,让逆向工程师很头疼
App加固中的代码混淆功能,让逆向工程师很头疼 "我想离开浪浪山." 在数次尝试破解某个App 时,某个逆向工程师无奈感慨道. 逆向工程师顾名思义就是把一个个完整的软件逆推 ...
- 火山引擎 DataLeap 套件下构建数据目录(Data Catalog)系统的实践
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 摘要 Data Catalog 产品,通过汇总技术和业务元数据,解决大数据生产者组织梳理数据.数据消费者找数和理解 ...
- 聊一聊为什么我要整合Microsoft.Extensions.DependencyInjection和Castle.Core
前言 如果用到动态代理,大家可能会有几种选择,排到前列的是Autofac+Castle.AspectCore和DoraInterception, 我将从我当时研究的经历,以及我遇到的场景,为大家展示下 ...
- Axure 进度条制作
拖两个矩形,一个用来做边框,另一个用来做进度 下图进度条的宽要设为2,如果是1的话,看不到背景色动 百分比 进度条 百分比 [[Math.floor(jdt.width/bk.width100)]] ...
- Linux day4:查看文件属性信息 inode和block 硬链接和软链接 inux系统时间 虚拟机克隆 linux定时任务 paramiko模块 公钥私钥
目录 文件属性信息 存储数据相关 inode block 访问文件原理 链接信息 硬链接 软链接 linux系统时间 虚拟机克隆 链接克隆和完整克隆 克隆之后的配置 linux定时任务 定时任务软件 ...
- Codeforces Round #728 (Div. 2) A~C 补题记录
比赛链接:Here 1541A. Pretty Permutations 给定 \(1,2,3,4,...n\) 序列,让每一个数字都不处于原来的位置,但总的移动距离要最小 \(n\) 为偶数的情况 ...
- 为什么我要迁移SpringBoot到函数计算
前言 为什么要迁移? 我们的业务有很多对外提供服务的 RESTful API,并且要执行很多不同的任务,例如同步连锁 ERP 中的商品信息到美团/饿了么等平台,在线开发票等.由于各种 API 和任务执 ...
- 基于函数计算自定义运行时快速部署一个 springboot 项目 什么是函数计算?
什么是函数计算? 函数计算是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函数计算为您准备好计算资源,弹性地可靠地运行任务,并提供日志查询.性能监控和报 ...
- 极速生成缩略图,Serverless 支撑赛事转播锁定冬奥亮点
作者 | 西流.筱姜 "北京冬奥会在开赛的第四天便成为了历史上收视最高的一届冬奥会,其转播内容总生产量将达 6000 小时,超过平昌冬奥会的 5400 小时.关注北京冬奥会的人群比往届都 ...