#ijpcvariance. [ijpc_variance]分散 (Variance)

[ijpc_variance]分散 (Variance)

分散计算问题

在统计学中,分散是用来表示数据的离散程度的数字。

假设有数列 a[1], a[2], ..., a[n],

  • 从 a[1] 到 a[n] 的总和除以 n 得到的结果是平均值 m。
  • 对于每个 a[k],计算它与 m 的差的平方,并将所有差的平方相加,然后除以 n 得到的结果就是方差 (σ^2)。

现在我们想要计算数列的某个区间的方差。

任务

给定一个数列 A[0], A[1], ... A[N-1]。首先通过调用 init(N, A) 来初始化数列 A 的值。

请实现以下几个函数:

  • 函数 init(N, A),该函数带有以下参数:

    • N -- 数列的长度。假设数列中的每一项都被分配了从 0 到 N-1 的不同整数作为编号。
    • A -- 由整数构成的数组,表示数列的各个项。可以假设对于每个 0 ≦ i < N,都有 1 ≦ A[i] ≦ 10,000。

    该函数在调用一次 update(i, x)variance(i, j) 之前只会被调用一次。该函数没有返回值。

  • 函数 update(i, x),该函数带有以下参数:

    • i -- 数列中发生变化的项的编号。可以假设 0 ≦ i < N。
    • x -- 第 i 项变化后的值。可以假设 0 ≦ x ≦ 10,000。该函数会被多次调用。每次调用对应数列中某个值的变化。该函数没有返回值。
  • 函数 variance(i, j),该函数带有以下参数:

    • i -- 想要计算方差的区间的起始项的编号。可以假设 0 ≦ i < N。
    • j -- 想要计算方差的区间的最后一项的编号。可以假设 i ≦ j < N。

    该函数会被多次调用。每次调用都需要返回从第 i 项到第 j 项(包括两端)共 (j - i + 1) 个值作为样本时的方差。将小数部分舍去取整数。

示例

考虑一个初始值为

A =

0

12

6

的数列,其中 N = 3。

首先,函数 init 通过上述参数进行调用。随后,按任意顺序进行多次 updatevariance 的调用。以下是一系列调用和相应的正确返回值的示例:

参数

返回值

variance(0, 2)

24

variance(1, 2)

9

update(2, 0)

无返回值

variance(0, 2)

32

variance(1, 2)

36

update(1, 11)

无返回值

variance(0, 2)

26

子任务

在一次执行中,updatevariance 的调用次数分别为 P 和 Q。

子任务 1 (50 分)

  • 1 ≦ N ≦ 1,000
  • 1 ≦ P+Q ≦ 1,000

子任务 2 (50 分)

  • 1 ≦ N ≦ 100,000
  • 1 ≦ P+Q ≦ 100,000

实现细节

限制

  • CPU 时间限制:5 秒
  • 内存限制:64 MB
    **注意:**没有规定堆栈大小的限制。堆栈使用的内存将计入总内存使用量。

接口 (API)

  • 实现文件夹:variance/ (原型:variance.zip)
  • 参赛者实现的文件:variance.cpp
  • 提交文件的接口:variance.h
  • 评分程序示例:grader.cpp
  • 输入示例:grader.in.1, grader.in.2, ...
    **注意:**评分程序示例读取的输入具有以下格式:
    • 第一行:N
    • 第二行:用空格分隔的 N 个整数 A[0], A[1], ..., A[N-1]。A[i] 表示数列中第 i 项的初始值。
    • 第三行:一个整数 M,表示 P+Q。
    • 第四行到第 M+3 行:对于 0 ≦ i < M,第 i+4 行包含三个整数 T[i], X[i], Y[i],用空格分隔。当 T[i] = 0 时,表示第 i 次调用为 update(X[i], Y[i]);当 T[i] = 1 时,表示第 i 次调用为 variance(X[i], Y[i])。
  • 对于给定的输入示例,评分程序示例期望输出:grader.expect.1, grader.expect.2, ...
    **注意:**评分程序示例写出了以下格式的输出:
    • 第一行到第 Q 行:对于 0 ≦ i < Q,第 i+1 行包含第 i 次 variance 调用应返回的结果。

  • Problem Proposal: qnighy
  • Problem Statement: qnighy

出处

IJPC 2012 Practice