把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

luogu P9120 [春季测试 2023] 密码锁

题面传送门

题目中明摆着让你对 k 不同的情况讨论,并且难度应该是递增的。

Section 1:k=1

应该不用我教你怎么做吧

Section 2:k=2

最大值最小下意识二分转化成判定问题。

你会发现最大值和最小值如果放不同的行不会比放在同一行更优,因此钦定最大值在第一行,最小值在第二行,然后把每个密码锁的两种状态看看能不能合法地放进去即可。时间复杂度 O(nlogV)

Section 3:k=3

钦定最大值在第一行,枚举最小值在哪一行,然后我们还剩下一行。

对于一个密码锁,如果其在最大值和最小值的那一行都合法,那么会对剩下的一行产生限制,限制为一段线段。而我们要求的就是所有密码锁的三个限制的并有没有交点,容易扫描线解决。时间复杂度 O(nklognlogV)

Section 4:k=4

前面都仿照 k=3,然后我们发现我们的限制变成了一车矩形。

线段之间可以直接合并,矩形不行。考虑容斥就可以合并,然后扫描线+线段树,时间复杂度 O(nk2klognlogV)

这有亿点点卡常。观察发现因为我们对原问题扫描线,因此就变成线段问题,还可以按照 k=3 的做法去做,时间复杂度 O(nk2lognlogV),应该就不卡常了。

submission

posted @   275307894a  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2022-03-19 luogu P4770 [NOI2018] 你的名字
2022-03-19 CF710F String Set Queries
2021-03-19 luogu P4248 [AHOI2013]差异
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示