CF1849
氵
在吃了五次罚时后,我终于放弃了卡常优先队列,并发现:把余
我为什么没想到哈希?自我检讨:见到关于字符串判定相等/不同个数时,一定要尝试用哈希!!!
记前缀
设排序的区间为
用 std::set
维护即可。
非哈希做法:
对每个位置求出它左边(包括它)的第一个 0
和右边(包括它)的第一个 1
。存在两个数组
对于一个修改区间
把每对 set
维护。
贪心法:先有一个错误但是有启发性的贪心:先把所有
这是错的,比如 0 2 1 2 0
,把第一个
于是想到把一段连续非 0 的数合并为一个块。 这一段只需要一个硬币。
如果一个块内有
模拟即可。
dp 法:
基本的,
若
若
若
若
若
答案为
朴实无华的题面:有多少个区间最大值在最小值右边。
先单调栈求出每个数左右两边第一个比他大/小的位置。
记
按套路,枚举每个
有两种方法计算这种区间的个数:
-
枚举
,求出 的最小值 ,要求在这个区间内 的右边不允许有比 小的。(否则最大值 就在最小值左边)即右端点 就不合法,总个数减去不合法个数。 -
枚举
,求出 的最小值 。同理,只要左端点 就合法。
注意以上两种方法都需单独考虑
我们枚举
但是感觉时间复杂度不太对啊?
如果按最大值从大到小枚举,每次在循环
为什么呢?假设上一次循环
显然应该
那么就有
我们选择了用枚举左端点的方法,说明
那也就说明
那每个数被枚举到,区间长度至少除以
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!