题目 2560:
蓝桥杯2019年第十届国赛真题-分考场
时间限制: 2s
内存限制: 320MB 提交: 172 解决: 0
题目描述
古语有云:春风得意马蹄疾,一日看尽长安花。当然在一场考试中所有人都春风得意马蹄疾是不可能的,尤其是碰到一些毒瘤出题人的时候。
又到了每月一次的月考,又是 xf 老师出题。
上一次 xf 老师出的题太毒瘤了,平均分只有 40 多,同学们都非常不满意,毕竟别的科的平均分都是 80 多。这次 xf 为了不被同学们寄刀片,想了一个办法:只公布所有考场的平均分的平均分。这样他就可以通过调整考场的分配方式,使得平均分显得高。(每个考场都可以容纳无限人)每次考试也不是所有同学都参加的,只有学号在 [l,r] 这个区间中的同学会参加。他想知道对于每次考试,他调整过考场后,所有考场的平均分的平均分的最大值。当然,同学们也可能会努力学习或整日颓废使成绩发生改变。
输入格式
输入的第一行包含一个整数 n。
第二行包含 n 个整数,第 i 个数 vi,表示开始时每个同学的成绩。第三行包含一个整数 q,表示有 q 次操作。之后 q 行,每行描述一个操作,第一个数表示操作类型。如果操作为 1 p x,表示学号为 p 的同学分数变为 x。如果操作为 2 l r k, 表示把学号在 [l,r] 中的同学分成 k 个考场,求这 k 个考场的平均分的平均分的最大值。
输出格式
对于每个 2 操作输出一行,四舍五入保留正好 3 位小数。
样例输入 复制
5
5 3 4 2 1
5
2 1 4 3
1 4 8
2 3 5 3
1 2 2
2 1 3 2
提示
【样例说明】
第一个操作询问学号在 [1, 4] 之间的同学分成 3 个考场的平均分的平均分
的最大值,最优策略是:{1}, {2, 4}, {3},平均分是(5/1 +(3+2)/2 + 4/1)/3 。
第二个操作把学号为 4 的同学的分数变为 8。
第三个操作询问学号在 [3, 5] 之间的同学分成 3 个考场的平均分的平均分
的最大值,最优策略是:{3}, {4}, {5}。
第四个操作把学号为 2 的同学分数变为 2。
第五个操作询问学号在 [1, 3] 之间的同学分成 2 个考场的平均分的平均分
的最大值,最优策略是:{1}, {2 3}。
【评测用例规模与约定】
对于全部评测用列,n ≤ 200000, q ≤ 200000, 任意时刻同学的分数 vi ≤ 10^9, k ≤ r- l + 1。
评测时将使用 10 个评测用例测试你的程序,每个评测用例的限制如下:
评测用例编号 n ≤ q ≤ 特殊说明
1 10 1 无
2,3 100 100 无
4∼6 2000 2000 无
7∼9 50000 50000 无
10∼12 200000 200000 没有 1 操作
13∼20 200000 200000 无
C
C++
Java
Python
PHP
代码重置
开启O2优化