题目描述
平面上有n 个圆 c1,c2,…,cn,按以下算法删除所有圆:
- 找到当前半径最大的圆(若有多个,选编号最小的),记为 cj。
- 删除 cj 及所有与 cj 有交集的圆(两个圆有交集指存在点同时在两圆内或圆周上)。
- 重复步骤 1-2,直到所有圆被删除。
当圆 ci 被删除时,若触发删除的圆是cj,则称ci 被 cj 删除。要求输出每个圆对应的删除圆编号。
输入格式
第一行包含整数 n(1≤n≤3×105)。
接下来n 行,每行包含三个整数 xi,yi,ri,表示圆 ci 的圆心坐标和半径(−109≤xi,yi≤109,1≤ri≤109)。
输出格式
输出一行 n个整数a1,a2,…,an,其中 ai 是删除 ci 的圆的编号。
样例
输入:
11
9 9 2
13 2 1
11 8 2
3 3 2
3 12 1
12 14 1
9 8 5
2 8 2
5 2 1
14 4 2
14 14 1
输出:
7 2 7 4 5 6 7 7 4 7 6
数据范围与提示
| 子任务 |
数据限制 |
| 1 |
n≤5000 |
| 2 |
n≤3×105,所有圆 yi=0 |
| 3 |
n≤3×105,每个圆最多与一个其他圆有交集 |
| 4 |
n≤3×105,所有圆半径相同 |
| 5 |
n≤105 |
| 6 |
n≤3×105 |