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)) .

  • 相关阅读:
    第一次作业:准备
    结对项目-四则运算 “软件”之升级版
    第三次作业:个人项目-小学四则运算 “软件”之初版
    分布式版本控制系统Git的安装与使用
    第一次作业9.6
    C语言--数据类型
    C语言--函数
    C语言--嵌套循环
    C语言--输入输出格式
    DateGrip连接Oracle,MySQL
  • 原文地址:https://www.cnblogs.com/Ax-Dea/p/14727516.html
Copyright © 2011-2022 走看看