#P14678. [ICPC 2025 Seoul R] Segments

[ICPC 2025 Seoul R] Segments

Description

在坐标平面的第一象限内,给定 nn 条平行于 xx 轴的线段。每条线段 SiS_i (1in1 \le i \le n) 由其左端点和右端点的坐标表示,分别为 (li,yi)(l_i, y_i)(ri,yi)(r_i, y_i)。所有坐标均为正整数。

现在你需要回答 qq 次询问。每次询问给定一条平行于 yy 轴的竖直线 x=px = p。这条竖直线由一个正整数 pp 表示。

如果每条线段 SiS_i 水平延伸,它最终会在点 (p,yi)(p, y_i) 处与直线 x=px = p 相交。如果该线段(包括其端点)已经与 x=px = p 相交,则无需延伸。例如,假设有 55 条线段 {(2,3),(5,3)}\{(2,3), (5,3)\}{(4,6),(9,6)}\{(4,6), (9,6)\}{(8,2),(12,2)}\{(8,2), (12,2)\}{(11,4),(13,4)}\{(11,4), (13,4)\}{(14,5),(17,5)}\{(14,5), (17,5)\},以及一条直线 x=11x = 11。为了使每条线段都与 x=11x = 11 相交,第一条线段需要向右延伸 66,第二条线段向右延伸 22,第三条和第四条线段延伸 00,第五条线段向左延伸 33

对于每次询问,确定所有线段与直线 x=px = p 相交所需延伸长度的最大值。形式化地说,令 dist(p,Si)\text{dist}(p, S_i) 表示线段 SiS_i 需要延伸以在点 (p,yi)(p, y_i) 处与 x=px = p 相交的距离。对于每次询问,输出 max1indist(p,Si)\max_{1 \le i \le n} \text{dist}(p, S_i)。在上面的例子中,该询问的答案是 66。参见下图。

:::align{center} :::

给定 nn 条线段和 qq 次询问,请编写一个程序,输出每次询问对应的最大延伸长度。

Input Format

你的程序需要从标准输入读取数据。输入的第一行包含两个整数 nn (1n2×1061 \le n \le 2 \times 10^6) 和 qq (1q2×1061 \le q \le 2 \times 10^6),其中 nn 是线段的数量,qq 是询问的次数。接下来的 nn 行中,第 ii 行包含三个整数 lil_irir_iyiy_i (1liri1091 \le l_i \le r_i \le 10^91yi1031 \le y_i \le 10^3),其中 lil_i(对应地,rir_i)是 SiS_i 左(对应地,右)端点的 xx 坐标,yiy_iSiS_i 两个端点的 yy 坐标。接下来的 qq 行是询问,第 jj 行包含一个整数 pjp_j (1pj1091 \le p_j \le 10^9),表示竖直线 x=pjx = p_j

Output Format

你的程序需要向标准输出写入数据。对于每次询问,恰好输出一行。第 jj 行应包含所有线段在点 (pj,yj)(p_j, y_j) 处与 x=pjx = p_j 相交所需延伸长度的最大值。

5 3
2 5 3
4 9 6
8 12 2
11 13 4
14 17 5
11
5
1
6
9
13
4 8
1 4 7
3 7 5
10 13 8
12 15 2
13
7
4
8
3
11
1
16
9
5
8
4
9
7
11
12

Hint

翻译由 DeepSeek V3 完成