CF1741F Multi-Colored Segments

题目描述

Dmitry 在坐标轴 $Ox$ 上有 $n$ 条不同颜色的线段。每条线段由三个整数 $l_i$、$r_i$ 和 $c_i$ 描述($1 \le l_i \le r_i \le 10^9, 1 \le c_i \le n$),其中 $l_i$ 和 $r_i$ 分别表示第 $i$ 条线段的两个端点的坐标,$c_i$ 表示该线段的颜色。 Dmitry 喜欢寻找线段之间的最小距离。但他认为同色线段之间的配对没有意思。因此,他想知道对于每一条线段,到最近的不同颜色的线段的距离是多少。 两条线段之间的距离定义为:第一条线段上的某个点与第二条线段上的某个点之间距离的最小值。特别地,如果两条线段相交,则它们之间的距离为 $0$。 例如,Dmitry 有 $5$ 条线段: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1741F/79204e7473b447d8fc1f451b9209c375a1af681c.png) - 第一条线段与第二条线段相交(且颜色不同),所以它们的答案都是 $0$。 - 对于第 $3$ 条线段,最近的不同颜色线段是第 $2$ 条,与其的距离为 $2$。 - 对于第 $4$ 条线段,最近的不同颜色线段是第 $5$ 条,与其的距离为 $1$。 - 第 $5$ 条线段完全位于第 $2$ 条线段内部(且颜色不同),所以它们的答案都是 $0$。

输入格式

输入的第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。 接下来是每个测试用例的描述。 每个测试用例的第一行包含一个整数 $n$($2 \le n \le 2 \cdot 10^5$),表示线段的数量。 接下来的 $n$ 行,每行包含三个整数 $l_i$、$r_i$ 和 $c_i$($1 \le l_i \le r_i \le 10^9, 1 \le c_i \le n$),分别表示第 $i$ 条线段的左端点、右端点和颜色。保证至少有 $2$ 条线段颜色不同。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出一行 $n$ 个整数,第 $i$ 个数表示第 $i$ 条线段到最近的不同颜色线段的距离。

说明/提示

在第一个样例的第一个测试用例中,只有一条颜色为 $2$ 的线段,其他线段颜色为 $1$。因此,对于颜色为 $1$ 的线段,答案等于到第 $3$ 条线段的距离;对于第 $3$ 条线段,答案等于到颜色为 $1$ 的线段的最小距离。 在第一个样例的第二个测试用例中,只有 $2$ 条线段,对于它们来说,答案等于它们之间的距离。 在第一个样例的第三个测试用例中,每条线段的至少一个端点与不同颜色的线段相交,所以所有答案都是 $0$。 第一个样例的第四个测试用例在题目描述中已经给出。 在第一个样例的第五个测试用例中,一条线段完全包含在另一条线段内部,对于它们来说,答案都是 $0$。 在第一个样例的第六个测试用例中,所有线段都是不同颜色的点。 由 ChatGPT 4.1 翻译