P17137 [KOI 2026 #1] 朋友
题目描述
KOI 村中有一条笔直的道路。道路上共有 $N$ 座房屋,编号为 $1$ 到 $N$ 的 $N$ 名学生分别居住在这些房屋中,每座房屋恰好住有一名学生。对于每个整数 $i$($1 \le i \le N$),学生 $i$ 所居住房屋的坐标为 $X_i$。不存在多座房屋位于同一坐标的情况。
此外,KOI 村中共有 $N$ 所学校,编号为 $1$ 到 $N$。对于每个整数 $i$($1 \le i \le N$),学生 $i$ 就读于学校 $S_i$。
对于学生 $i$ 和学生 $j$($i \ne j$),如果满足下列条件中的至少一个,则称这两名学生互为朋友:
- 两名学生就读于同一所学校,并且两人所居住房屋之间的距离不超过 $K_1$。
- 两名学生就读于不同的学校,并且两人所居住房屋之间的距离不超过 $K_2$。
这里,两座房屋之间的距离定义为其坐标之差的绝对值。也就是说,学生 $i$ 与学生 $j$ 所居住房屋之间的距离为 $|X_i-X_j|$。
请编写一个程序,对每名学生计算其朋友人数。请注意,学生自己不算作自己的朋友。
输入格式
第一行输入三个整数 $N$、$K_1$、$K_2$,整数之间以空格分隔。
接下来 $N$ 行给出各名学生的信息。其中,第 $i$ 行输入两个整数 $X_i$、$S_i$,整数之间以空格分隔($1 \le i \le N$)。
输出格式
第一行输出 $N$ 个整数,整数之间以空格分隔。其中,第 $i$ 个整数表示学生 $i$ 的朋友人数($1 \le i \le N$)。
说明/提示
### 限制条件
- 输入中给出的所有数均为整数。
- $2 \le N \le 500\,000$。
- $1 \le K_1,K_2 \le 10^9$。
- 对于每个整数 $i$($1 \le i \le N$),均有 $1 \le X_i \le 10^9$。
- 对于任意整数 $i,j$($1 \le i