#2005. 「SDOI2017」相关分析

内存限制:256 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:Special Judge
上传者: 匿名

题目描述

Frank 对天文学非常感兴趣,他经常用望远镜看星星, 同时记录下它们的信息,比如亮度、颜色等等,进而估算出星星的距离、半径等等。

Frank 不仅喜欢观测,还喜欢分析观测到的数据。他经常分析两个参数之间 (比如亮度和半径) 是否存在某种关系。

现在 Frank 要分析参数 X Y 之间的关系。他有 n 组观测数据,第 i 组观测数据记录了 x_i y_i 。他需耍进行以下几种操作:

  • \texttt{1 L R}
    用直线拟合第 L 组到第 R 组观测数据。用 \bar x 表示这些观测数据中 x 的平均数,用 \bar y 表示这些观测数据中 y 的平均数,即

    \begin{aligned} \bar{x} &= \frac{1}{R - L + 1} \sum\limits_{i = L} ^ R x_i \\ \bar{y} &= \frac{1}{R - L + 1} \sum\limits_{i = L} ^ R y_i \end{aligned}

    如果直线方程是 y = ax + b ,那么 a b 应该这样计算:

    \begin{aligned} a &= \frac{\sum\limits_{i = L} ^ R (x_i - \bar{x})(y_i - \bar{y})}{\sum\limits_{i = L} ^ R (x_i - \bar{x}) ^ 2} \\ b &= \bar{y} - a \bar{x} \end{aligned}

    你需要帮助 Frank 计算 a

  • \texttt{2 L R S T}
    Frank 发现测量第 L 组到第 R 组数据时有误差,对于每个 i 满足 L \leq i \leq R x_i 需要加上 S y_i 需要加上 T

  • \texttt{3 L R S T}
    Frank 发现第 L 组到第 R 组数据需要修改,对于每个 i 满足 L \leq i \leq R x_i 需要修改为 (S + i) y_i 需要修改为 (T + i)

输入格式

第一行两个数 n m ,表示观测数据组数和操作次数。
接下来一行 n 个数,第 i 个数是 x_i
接下来一行 n 个数,第 i 个数是 y_i
接下来 m 行,表示操作,格式见题目描述。

输出格式

对于每个 1 操作,输出一行,表示直线斜率 a 。选手输出与标准输出的绝对误差或相对误差不超过 10 ^ {-5} 即为正确。

样例

样例输入

3 5
1 2 3
1 2 3
1 1 3
2 2 3 -3 2
1 1 2
3 1 2 2 1
1 1 3

样例输出

1.0000000000
-1.5000000000
-0.6153846154

数据范围与提示

对于 20\% 的数据, 1 \leq n, m \leq 1000
对于另外 20\% 的数据没有 3 操作,且 2 操作中 S = 0
对于另外 30\% 的数据没有 3 操作;
对于 100\% 的数据, 1 \leq n, m \leq 10 ^ 5
对于所有数据, 1 \leq L \leq R \leq n, 0 \leq |S|, |T | \leq 10 ^ 5, 0 \leq |x_i|, |y_i| \leq 10 ^ 5
对于所有数据,1 操作中不会出现分母为 0 这类特殊情况。