ABC408C 翻译+题解
题面汉化
问题陈述
在 AtCoder 王国中,有 \(N\) 座城墙,编号从 \(1\) 到 \(N\)。此外,还有 \(M\) 座炮塔。
第 \(i\) 座炮塔守卫编号从 \(L_i\) 到 \(R_i\) 的城墙。
当某座炮塔被摧毁时,它原本守卫的城墙将不再受到该炮塔的守卫。
请计算,最少需要摧毁多少座炮塔,才能使得至少有一座城墙没有被任何炮塔守卫?
限制条件
- \(1 \leq N \leq 10^6\)
- \(1 \leq M \leq 2 \times 10^5\)
- \(1 \leq L_i \leq R_i \leq N\)(\(1 \leq i \leq M\))
- 所有输入值均为整数。
输入格式
输入由标准输入提供,格式如下:
\(N\) \(M\)
\(L_1\) \(R_1\)
\(L_2\) \(R_2\)
$ \vdots \(
\)L_M$ \(R_M\)
输出格式
输出一个整数,表示最少需要摧毁的炮塔数量,使得至少有一座城墙没有被任何炮塔守卫。
题解
题意
\(m\) 个炮台守护 \(n\) 个城墙,第 \(i\) 个炮台的守护范围是 \([l_i, r_i]\) 。设城墙 \(i\) 被 \(c_i\) 个炮台覆盖,输出:
\[\underset{1 \le i \le N}{\min} c_i
\]
思路
第一想法通过 \((l,r)\) 维护 \(c\),最后遍历 \(c\) 输出最小值。但如果暴力维护 \(c\),复杂度是 \(O(MN) = 2 \times 10^{11}\),会超时。此时引入差分数组将维护操作优化为 \(O(1)\),可以把复杂度优化为 \(O(M)\)。
最终解:遍历每组 \((l,r)\) 维护差分数组 \(d\),通过 \(d\) 求出 \(c\)。最后遍历 \(c\) 输出最小值。

浙公网安备 33010602011771号