#3836. 兔猫信奥学院的“右侧守护者”

兔猫信奥学院的“右侧守护者”

🏫 题目名称:兔猫信奥学院的“右侧守护者”

🐰🐱 题目描述

在兔猫信奥学院的“魔法区间殿”里,加菲老师布置了一排排时空区间 \([start_i, end_i]\)。小兔和小猫的任务是:

对于每一个时空区间 (i),找到一扇“右侧时空门”——也就是另一个区间 (j),满足
[startjendi][ start_j \ge end_i ] 并且在所有满足条件的区间中,\(start_j\) 最小(如果有多扇门,取最靠左的那扇)。如果不存在这样的“右侧时空门”,就记为 (-1)。

加菲老师强调:“时空区间的起点都不相同,排列也未必按顺序给出,你要在 \(O(n\log n)\) 时间内快速完成所有寻找!”


📥 输入格式

第一行:整数 n,表示区间数量
接下来 n 行:每行两个整数 start_i, end_i,表示第 i 个区间的起点和终点

- \(1 \le n \le 2\times10^4\)

  • \(-10^6 \le start_i \le end_i \le 10^6\)
  • 所有 \(start_i\) 两两不同

📤 输出格式

共 n 个整数,按原输入顺序依次输出每个区间的“右侧区间”下标(0 ~ n-1),不存在则输出 -1

💡 输入输出样例

样例 1

1
1 2
-1

说明:只有一个区间,没有“右侧”区间。

样例 2

3
3 4
2 3
1 2
-1 0 1

说明: 对于 ([3,4]) 无右侧;
([2,3]) 的右侧是 ([3,4])(下标 0);
([1,2]) 的右侧是 ([2,3])(下标 1)。

样例 3

3
1 4
2 3
3 4
-1 2 -1

说明: ([2,3]) 的右侧是 ([3,4])(下标 2),其余无右侧。


📊 数据范围

  • 区间数量 \(n\le2\times10^4\) - \(-10^6\le start_i\le end_i\le10^6\)
  • 起点互不相同
  • 要求总体时间复杂度 \(O(n\log n)\)