把所有相同取值聚合。设 U=max(ai),定义频次数组 cnt[x] 表示值为 x 的元素个数。则
S=∑y=1Ucnt[y]⋅H(y),
H(y)=∑x=1Ucnt[x] ⋅⌊yx⌋.
对固定的 y,当 x∈[ky,(k+1)y−1] 时有 ⌊yx⌋=k。因此可以把 [1,U] 按长度为 y 的区间分块:
给定n个元素ai,要求计算以下表达式的值:
$S=\sum_{1 \leq i \leq n} \sum_{1 \leq j \leq n}\left\lfloor\frac{a_{i}}{a_{j}}\right\rfloor$
第一行包含一个整数n,表示元素的个数,满足1≤n≤105
第二行包含n个整数a1,a2,..an,其中1≤ai≤105
输出一个整数,表示计算得到的值S。
输入
3
1 2 3
输出
9
说明
对于输入的样例,计算过程如下:
$S=\sum_{1 \leq i \leq 3} \sum_{1 \leq j \leq 3}\left\lfloor\frac{a_{i}}{a_{j}}\right\rfloor$
具体计算:
当i=1时:1+0+0=1
当i=2时:2+1+0=3
当i=3时:3+1+1=5
将所有结果相加,得到S=1+3+5=9