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

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

题面传送门

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

Section 1:\(k=1\)

应该不用我教你怎么做吧

Section 2:\(k=2\)

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

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

Section 3:\(k=3\)

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

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

Section 4:\(k=4\)

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

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

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

submission

posted @ 2023-03-19 19:09  275307894a  阅读(84)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end