这题跟315Count of Smaller Numbers After Self有异曲同工之妙。
315是要求右面的数小于左面
这题先处理一下,计算f[0:i]的和 i从0取到数组长度-1
因此 任何一个子序列的和 可以表示为 f[0:m]-f[0:n] 这很重要
简记新数组为f
那么就是要求 min <= f[j]-f[i] <= max
仍然是归并的策略 仍然是从大到小排序
每次递归处理后 获得2个子数组A B
就要找 所有的 min <= bi-ai <= max
注意到A B已经有序
对于a0 我们可以找到B中2个元素 bk bl 使得它们之间的数都符合
然后对于a1 可能k l都会不断往右方向移动 因此能够做到O(N)
整体复杂度就是O(NlogN)