扫描线 + $set$ .
- 把圆看做上下两段半圆弧,因为位置关系只有包含和相离,所以无论 $x$ 取什么值,各个圆弧上下相对顺序是不变的.所以可以将它们全都丢进 $set$ 里面,方便接下来查询.
- 做一个扫描线,左边插入,右边删除.对于每个圆弧,插入的时候询问它的 $upper_bound$ .
- 若找到的是上圆弧,说明它就是当前圆外面的第一个圆.
- 若找到的是下圆弧,说明当前圆外面的第一个圆就是那个下圆弧外面的第一个圆.
- 可能出现找不到的情况,需要特判.
发现自己好像是第一次写扫描线…
1 |
|
夢はここに 思い出は遠くに
扫描线 + $set$ .
发现自己好像是第一次写扫描线…
1 | #include<bits/stdc++.h> |