#T0079. 星河夜市的风灯

0

星河夜市的风灯

题目背景

星河夜市的河道两岸挂着一排风灯,共 M 个灯位,编号 1…M,初始全部熄灭。 巡夜人手里有 N 张“点灯符”,第 i 张符可以让连续一段灯位 [L_i, R_i] 同时亮起来 (在原本亮着的灯上再施一次符不会更亮,也不会损坏;灯只记录“被点亮过没有”)。

每张符只能使用一次,且使用时要耗费一张符纸。巡夜人资源有限,他想知道:

  1. 把 N 张符全部使用后,恰好只被一张符覆盖的灯位有多少个?
  2. 如果允许他从 N 张符里丢掉任意张再使用剩下的,他最多能让多少个灯位 至少亮过一次(即被剩下的符至少覆盖一次)?

第二问其实只取决于“剩下的符覆盖区间的并集长度”。

题目描述

给定 M 和 N 个闭区间 [L_i, R_i](1 ≤ L_i ≤ R_i ≤ M,整数灯位):

  • 输出两行;
  • 第一行:全部区间叠加后,覆盖次数恰好为 1 的整数点个数;
  • 第二行:所有区间并集包含的整数点个数(第二问答案)。

输入格式

第一行:两个整数 N、M(1 ≤ N ≤ 2×10⁵,1 ≤ M ≤ 10⁹)。 接下来 N 行,每行两个整数 L_i、R_i。

输出格式

两行,每行一个整数。

样例输入 #1

3 10
1 4
3 6
8 9

样例输出 #1

6
8

样例解释 #1

覆盖次数:灯位 1,2 各 1 次;3,4 各 2 次;5,6 各 1 次;8,9 各 1 次。 恰好 1 次的是 {1,2,5,6,8,9} 共 6 个;并集 {1..6}∪{8,9} 共 8 个。

数据范围

  • N ≤ 2×10⁵,M ≤ 10⁹(不能开 M 大小的数组,需要事件/差分思想或排序扫描)。
  • 区间端点均为整数,统计按闭区间整数点计。