T3

构成矩形的条件是两条线段上的点纵坐标相同,即选择 \((a_i, y_1)\)\((a_i, y_2)\)\((a_j, y_1), (a_j, y_2)\)。矩形的长为 \(|a_j - a_i|\),宽为 \(|y_2 - y_1|\),需满足 \(|a_j - a_i| - |y_2 - y_1| = k\)

假设 \(a_j > a_i\),则 \(d = a_j - a_i\)\(|y_2 - y_1| = d - k\)。需满足 \(d - k \geq 1\)\(d - k \leq m\),即 \(d \in [k+1, m+k]\)

对于固定的 \(d\),点对 \((y_1, y_2)\) 满足 \(|y_2 - y_1| = d - k\) 的数量为 \(2(m - d + k + 1) - 2 = 2(m - d + k)\)


暴力是 \(O(n^2)\) 的,如何优化?

预处理前缀和数组 \(sum[x]\) 表示 \(\leq x\)\(a_i\) 的数量,\(sum2[x]\) 表示 \(\leq x\)\(a_i\) 的和。对于每个 \(a_i\),满足 \(a_j \in [a_i + k + 1, a_i + m + k]\)\(a_j\) 的数量为 \(cnt = sum[a_i + m + k] - sum[a_i + k]\),对应的 \(d\) 的和为 \(diff\_sum = sum2[a_i + m + k] - sum2[a_i + k] - a_i \cdot cnt\)。总贡献为 \(2 \cdot ((m + k) \cdot cnt - diff\_sum)\)。二分答案即可。

posted @ 2025-08-15 08:14  swate  阅读(10)  评论(0)    收藏  举报
body{ cursor: url(https://files.cnblogs.com/files/wkfvawl/cursor.ico),auto; }