-
\(\text{CF1045G AI robots}\)
- 算法:cdq分治
题目:
火星上有 \(n\) 个机器人排成一行,第 \(i\) 个机器人的位置为 \(x_{i}\),视野为 \(s_{i}\),智商为 \(q_{i}\)。我们认为第 \(i\) 个机器人可以看到的位置是 \([x_{i}-s_{i},x_{i}+s_{i}]\)。
如果一对机器人相互可以看到,且它们的智商 \(q_{i}\) 的差距不大于 \(k\),那么它们会开始聊天。
为了防止它们吵起来,请计算有多少对机器人可能会聊天。
\(n\le 10^5,0\le k\le 20\)。
题解:
考虑一对机器人能互相交流的限制:
若 \((i,j)\) 这对机器人能交流,不妨钦定 \(x_i<x_j\),则当且仅当
\[x_i+s_i\ge x_j-s_j,|q_i-q_j|\le k \]那么这显然是个三维偏序问题。
发现 \(x_i+s_i\ge x_j-s_j\) 这个限制涉及两个元素,考虑将 \(s\) 从大到小排序,那么可以保证若右边的机器人能看见左边的机器人,则左边的必然也能看见右边的。
然后因为 \(k\) 是定量,所以第二维就是以 \(q\) 为关键字排序。
然后记得将位置离散化一下。