数矩形の题解

朴素做法(60pts)

直接暴力枚举每条线端上的点组成的矩形统计总数即可。

正解

任然可以枚举线段 a_ia_j 上的端点进行探究。
abs(a_i - a_j) 的长度可以是长方形的宽也可以是长方形的长。

  1. abs(a_i - a_j) 是长方形的长时:可以构成 \max(m - (a_j - a_i - k) + 1, 0) 个矩形
  2. abs(a_i - a_j) 是长方形的宽时:可以构成 \max(m - (a_j - a_i + k) + 1, 0) 个矩形

那么通过简单的计算我们可以得出我们的答案是:
\sum_{i = 1}^{n} \ \sum_{j = i + 1}^{r_i} (m - (a_i - a_i + k) + 1) + \sum_{i = 1}^{n} \ \sum_{j = L_i}{R_i}(m - (a_j - a_i - k) + 1)

其中 r_i 是使得 m - (a_j - a_i + k) + 1 > 0 成立的 j 的最大值。
L_ia_j - a_i > k 成立的最笑小值
R_i 是使得 m - (a_j - a_i - k) + 1 > 0 成立的最大值
都需要进行二分求得。

提示: lower_bound()upper_bound() 函数可以直接二分。