#P14589. [Bulgarian 2026]Free Time

    ID: 13805 传统题 1500ms 1024MiB 尝试: 2 已通过: 1 难度: 7 上传者: 标签>CF2300数据结构树状数组平衡树扫描线排序前缀和

[Bulgarian 2026]Free Time

题目描述

Deni 的日程非常繁忙,她把每天的安排精确到了毫秒

每天共有 NN 个活动。对于编号为 ii 的活动(0iN10 \le i \le N-1),它占用的时间段是从第 LiL_i 毫秒到第 RiR_i 毫秒(含端点)。

在任意一个毫秒时刻,Deni 最多只能做一项活动;如果这个时刻不属于任何允许的活动区间,她就休息。

接下来会有 DD 天的限制安排。
在第 jj 天(0jD10 \le j \le D-1),她只被允许做编号在 XjX_jYjY_j 之间(含端点)的活动。

Deni 是个工作狂,所以只要某一毫秒落在任意一个被允许活动的时间区间内,她就会在这毫秒工作。她可以随时切换活动,甚至可以重新开始做某项更早时刻安排的活动;因此对于某一天而言,真正重要的只是这些被允许区间的并集长度

请你对于每一天,求出 Deni 会忙碌多少毫秒。

你需要实现程序 freetime


实现要求

你需要实现函数:

std::vector<int> solve(
    std::vector<int> L, std::vector<int> R,
    std::vector<int> X, std::vector<int> Y
)

其中:

  • LR:长度为 NN 的数组,第 ii 个活动的时间区间为 [Li,Ri][L_i, R_i]
  • XY:长度为 DD 的数组,第 jj 天只允许活动编号落在区间 [Xj,Yj][X_j, Y_j] 内。

函数需要返回一个长度为 DD 的数组。
返回值中第 jj 个数应为:在第 jj 天里,所有允许活动区间的并集中包含的毫秒数。


限制

  • 1N5×1051 \le N \le 5 \times 10^5
  • 对所有 0iN10 \le i \le N-1,有 1LiRi1061 \le L_i \le R_i \le 10^6
  • 1D5×1051 \le D \le 5 \times 10^5
  • 对所有 0jD10 \le j \le D-1,有 0XjYjN10 \le X_j \le Y_j \le N-1

子任务

子任务编号 分值 需要通过的前置子任务 NN DD 其他限制
0 - 样例
1 4 2×103\le 2\times 10^3 =1=1 X0=0, Y0=N1, Ri104X_0=0,\ Y_0=N-1,\ R_i\le 10^4
2 1 5×105\le 5\times 10^5
3 0–1 2×103\le 2\times 10^3 2×104\le 2\times 10^4 X0=0, Y0=N1X_0=0,\ Y_0=N-1
4 20 5×105\le 5\times 10^5
5 7 - 对每个 ii,都有 Lii+1RiL_i \le i+1 \le R_i;任意两个区间要么互不相交,要么一个包含另一个,且不存在完全相同的区间
6 30 5×105\le 5\times 10^5
7 4 1–2 - 对所有 jj,都有 Xj2X_j \le 2
8 27 0–7 5×105\le 5\times 10^5

注:原 PDF 表格在文本提取时有轻微错位,上表按可辨识内容整理。


样例

输入

5
1 5
2 7
9 11
5 10
2 4
15
0 0
0 1
0 2
0 3
0 4
1 1
1 2
1 3
1 4
2 2
2 3
2 4
3 3
3 4
4 4

输出

5
7
10
11
11
6
9
10
10
3
7
10
6
9
3

说明

共有 5 个活动区间:

  • [1,5][1,5]
  • [2,7][2,7]
  • [9,11][9,11]
  • [5,10][5,10]
  • [2,4][2,4]

例如:

  • 查询 (0,2)(0,2) 表示只允许编号 0,1,20,1,2 的活动,对应区间并集为 [1,7][9,11][1,7]\cup[9,11],总长度为 7+3=107+3=10
  • 查询 (0,3)(0,3) 对应区间并集为 [1,11][1,11],总长度为 1111
  • 查询 (4,4)(4,4) 只保留区间 [2,4][2,4],总长度为 33