Java 大学B组 第十届蓝桥杯 2019年国赛真题( 七 )


又到了每月一次的月考 , 又是 xf 老师出题 。
上一次 xf 老师出的题太毒瘤了 , 平均分只有40 40 40 多 , 同学们都非常不满意 , 毕竟别的科的平均分都是80 80 80 多 。
这次 xf 为了不被同学们寄刀片 , 想了一个办法:只公布所有考场的平均分的平均分 。这样他就可以通过调整考场的分配方式 , 使得平均分显得高 。(每个考场都可以容纳无限人)
每次考试也不是所有同学都参加的 , 只有学号在[ l , r ] [l,r] [l,r] 这个区间中的同学会参加 。
他想知道对于每次考试 , 他调整过考场后 , 所有考场的平均分的平均分的最大值 。
当然 , 同学们也可能会努力学习或整日颓废使成绩发生改变 。
输入格式
输入的第一行包含一个整数n n n 。
第二行包含n n n 个整数 , 第i i i 个数v i v_{i} vi? , 表示开始时每个同学的成绩 。
第三行包含一个整数q q q , 表示有q q q 次操作 。
之后q q q 行 , 每行描述一个操作 , 第一个数表示操作类型 。
如果操作为1 p x 1 p x 1px , 表示学号为p p p 的同学分数变为x x x 。
如果操作为2 l r k 2 l r k 2lrk, 表示把学号在[ l , r ] [l,r] [l,r] 中的同学分成k k k 个考场 , 求这k k k 个考场的平均分的平均分的最大值 。
输出格式
对于每个 2 操作输出一行 , 四舍五入保留正好 3 位小数 。
测试样例1
Input:55 3 4 2 152 1 4 31 4 82 3 5 31 2 22 1 3 2Output:3.8334.3334.000Explanation:第一个操作询问学号在 [1, 4] 之间的同学分成 3 个考场的平均分的平均分的最大值 , 最优策略是:{1}, {2, 4}, {3} , 平均分是 ${formula_1}第二个操作把学号为 4 的同学的分数变为 8 。第三个操作询问学号在 [3, 5] 之间的同学分成 3 个考场的平均分的平均分的最大值 , 最优策略是:{3}, {4}, {5} 。第四个操作把学号为 2 的同学分数变为 2 。第五个操作询问学号在 [1, 3] 之间的同学分成 2 个考场的平均分的平均分的最大值 , 最优策略是:{1}, {2 3} 。
:5 1 + 3 + 2 2 + 4 1 3 {{{5} \over {1}} + {{3 + 2} \over {2}} + {{4} \over {1}} } \over {3} 315?+23+2?+14??
评测用例规模与约定
对于全部评测用列 ,  n ≤n ≤n≤,q ≤q ≤q≤, 任意时刻同学的分数v i ≤ 1 0 9 v_{i} ≤ 10^{9} vi?≤109 ,  k ≤ r ? l + 1 k ≤ r ? l + 1 k≤r?l+1 。
评测时将使用10 10 10 个评测用例测试你的程序 , 每个评测用例的限制如下:
code:
【Java 大学B组第十届蓝桥杯 2019年国赛真题】