#L5468. 「eJOI2025」度假

    ID: 5300 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>贪心图结构二分图二分图区间交集

「eJOI2025」度假

#5468. 「eJOI2025」度假

题目描述

题目译自 eJOI2025eJOI2025 Day2Day2 T3.T3. Vacation

Anton 和他的朋友们正计划一起去度假。他们已经选好了地点;然而,日期却难以达成一致。

所有 NN 位朋友都提前提交了他们计划休假的日子。朋友 ii 最初安排的休假时间是从第 LiL_i 天到第 RiR_i 天(包含首尾)。为了最大化他们能共同度过的时间,每位朋友都可以通过提前或推迟来调整自己的休假时间。具体来说,第 ii 位朋友可以选择一个整数 did_i,并将他们的休假时间调整到区间 [Li+di,Ri+di][L_i + d_i, R_i + d_i]did_i 为正数表示比原计划晚休假,为负数表示提早,而 di=0d_i = 0 表示保持原计划。

朋友们知道,他们的调整会给老板带来不便。因此,他们调整休假日的总移动量不能超过某个整数 KK。形式上,他们必须满足 d0+d1++dN1K|d_0| + |d_1| + \dots + |d_{N-1}| \leq K

请帮助朋友们计算出,在他们优化安排日程后,所有人能共同度假的最长天数是多少。

实现细节

您应该实现 plan_vacation 函数:

int plan_vacation(int N, std::vector<int> L, std::vector<int> R, long long K)
  • NN:朋友的数量
  • LL:一个包含 NN 个正整数的向量,其中每个元素表示该朋友最初安排的休假第一天;
  • RR:一个包含 NN 个正整数的向量,其中每个元素表示该朋友最初安排的休假最后一天;
  • KKd0+d1++dN1|d_0| + |d_1| + \dots + |d_{N-1}| 的最大允许值。

该函数对于每个测试将被调用一次。它必须返回所有朋友能共同度假的最大天数,如果完全不可能共同度假,则返回 00

输入格式

第一行包含两个整数:NNKK 的值。

22 行到第 N+1N+1 行:每行包含两个整数——LiL_iRiR_i

输出格式

第一行包含一个整数:该调用的返回值。

样例

考虑以下调用:

plan_vacation(3, {1, 5, 2}, {3, 9, 5}, 3)

朋友们请求的休假区间如下:[1,3][1,3], [5,9][5,9], [2,5][2,5]。因此,朋友 00 可以将他们的休假推迟 22 天,朋友 11 将他们的休假提前 11 天,得到休假区间 [3,5][3,5], [4,8][4,8], [2,5][2,5]。这样,所有朋友在第 44 天和第 55 天都有空,共同的休假时间为 22 天。可以证明,在 K=3K=3 的限制下,他们无法得到更好的结果。因此,函数应返回 22

数据范围与提示

对于所有输入数据,满足:

  • 1N500 0001 \leq N \leq 500~000
  • 1LiRi1091 \leq L_i \leq R_i \leq 10^9
  • 0K10180 \leq K \leq 10^{18}
子任务 分值 子任务依赖 附加限制
0 00 - 样例。
1 77 K=0K=0
2 1111 1 K1K \leq 1
3 66 - K=1018K=10^{18}
4 1313 0 N104N \leq 10^4, Li10L_i \leq 10, Ri10R_i \leq 10
5 1818 N103N \leq 10^3
6 2929 0, 4, 5 N105N \leq 10^5
7 1616 0 - 6 -