我们设 $col[i]$ 表示当前颜色 i 出现了多少次,$ans$ 当前共有多少种可行的配对方案(有多少种可以选到一双颜色相同的袜子),表示然后每次移动的时候更新答案——设当前颜色为 $k$,如果是增长区间就是 $ans$ 加上 $C(col[k]+1,2)-C(col[k],2)$,如果是缩短就是 $ans$ 减去 $C(col[k],2)-C(col[k]-1,2)$。这应该很好理解。
而这个询问的答案就是 $\frac{ans}{C(r-l+1,2)}$
-这里有个优化:
-$C(a,2)=a\times (a-1)/2$
+这里有个优化:$C(a,2)=a\times (a-1)/2$
+
所以 $C(a+1,2)-C(a,2)=(a+1)\times a/2-a\times (a-1)/2=a/2\times (a+1-a+1)=a/2\times 2=a$
+
所以 $C(col[k]+1,2)-C(col[k],2)=col[k]$
这样我们少算了很多东西呢!