zoukankan      html  css  js  c++  java
  • 题解:「Ynoi2009」rprsvq

    题面 Link

    Y n o i 数 数 题

    先化一下单次方差的式子:

    [egin{align} &frac{sum a_i^2 - 2sum a_i cdot ar{a} + sumar{a}^2}{n}&\ =&frac{1}{n}sum a_i^2 - frac{2}{n} sum a_i ar{a} + ar{a}^2&\ =&frac{1}{n}sum a_i^2 - frac{1}{n^2} left(sum a_i ight)^2&\ end{align} ]

    (S) 表示一个下标集合,这样答案就可以表示成:

    [sum_{Sin {1,2,3,dots,n}} frac{1}{|S|}left(sum_{iin S} a_i^2 ight) - frac{1}{|S|}left(sum_{iin S} a_i ight) ^ 2 ]

    先搞前面的式子,考虑枚举集合大小 (k) 和每个元素的贡献,计数的时候可以用钦定法解决,可以得到:

    [egin{align} &sum_k frac{1}{k} {n - 1choose k - 1} sum_{i=1}^n a_i^2&\ =&sum_k frac{1}{k} frac{(n - 1)!}{(k - 1)!(n - k)!} sum_{i=1}^n a_i^2&\ =&frac{1}{n} sum_k {nchoose k} sum_{i=1}^n a_i^2&\ =&frac{2^n - 1}{n} sum_{i=1}^n a_i^2&\ end{align} ]

    再搞后面的式子,先把平方写成 (sum_{i=1}^n sum_{j=1}^n a_i a_j) ,对于 (i=j)(i eq j) 的情况分类讨论算贡献。

    1. (i = j)

    [egin{align} &sum_k frac{1}{k^2} {n - 1 choose k - 1} sum_{i=1}^n a_i^2&\ =&sum_k frac{1}{k^2} frac{(n-1)!}{(k-1)!(n-k)!} sum_{i=1}^n a_i^2&\ =&frac{1}{n} sum_k frac{1}{k} frac{n!}{k!(n - k)!} sum_{i=1}^n a_i^2&\ =&frac{1}{n} f(n) cdot sum_{i=1}^n a_i^2&\ end{align} ]

    其中 (f(n) = sum_k frac{1}{k} {n choose k}) .

    考虑预处理,考虑差分:

    [egin{align} f(n) - f(n - 1) =& frac{1}{n}cdot {nchoose n} + sum_{i=1}^{n - 1} frac{1}{k} cdot left({n choose k} - {n choose k - 1} ight)&\ =& frac{1}{n} + sum_{i=1}^{n - 1} frac{1}{k} {n - 1choose k - 1}&\ =& frac{1}{n} + frac{2^n - 2}{n}&\ =& frac{2^n - 1}{n}&\ end{align} ]

    1. (i eq j)

    [egin{align} &sum_k frac{1}{k^2} {n - 2choose k - 2} left(left(sum_{i=1}^n a_i ight) ^ 2 - sum_{i=1}^n a_i^2 ight)&\ =&sum_k frac{1}{k^2} frac{(n-2)!}{(k-2)!(n-k)!}left(left(sum_{i=1}^n a_i ight) ^ 2 - sum_{i=1}^n a_i^2 ight)&\ =&frac{1}{ncdot (n - 1)} sum_k frac{k - 1}{k} frac{n!}{k!(n - k)!}left(left(sum_{i=1}^n a_i ight) ^ 2 - sum_{i=1}^n a_i^2 ight)&\ =&frac{1}{ncdot (n - 1)} sum_k left({nchoose k} - frac{{nchoose k}}{k} ight) left(left(sum_{i=1}^n a_i ight) ^ 2 - sum_{i=1}^n a_i^2 ight)&\ =&frac{2 ^ n - 1 - f(n)}{ncdot (n - 1)}left(left(sum_{i=1}^n a_i ight) ^ 2 - sum_{i=1}^n a_i^2 ight)&\ end{align} ]

    然后用线段树维护一下 (F = sum_{i=l}^r a_i)(G = sum_{i=l}^r a_i^2) .

    答案就是:

    [frac{2^n - 1}{n} F - frac{Fcdot f(len)}{len} - frac{2^n - 1 - f(len)}{lencdot (len - 1)} (G^2 - F) ]

    时间复杂度 (mathcal{O}(mlog n)) .

  • 相关阅读:
    Trapping Rain Water
    Construct Binary Tree from Preorder and Inorder Traversal
    Flatten Binary Tree to Linked List
    Permutations II
    Unique Paths II
    Path Sum II
    Unique Binary Search Trees II
    evdev module-----uinput.py
    evdev module-----events.py
    evdev module-----device.py
  • 原文地址:https://www.cnblogs.com/Ax-Dea/p/14727516.html
Copyright © 2011-2022 走看看