Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:1 s 空间限制:256 MB

#2901. 「SDOI2017」相关分析

Statistics

题目描述

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 xi \ \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})(yi - \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} $ 即为正确。

样例

input

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

output

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 $ 这类特殊情况。