还记得高中数学的统计部分的极差吗?既然你能上zcmu计算机及其相关专业,想必计算能力是很厉害的,有一个实验得到n个数,做实验的同学经常问你某个区间[L,R]的范围误差。(数据范围[1,100000]) Input 输入两个数n,m,第二行n个数,接下来m行[L,R ] Output 输出:每一个[L,R]的误差范围
时间: 2024-03-27 20:36:49 浏览: 56
是的,我还记得高中数学的统计部分的极差。
针对您的问题,我可以提供以下解决方案:
1. 首先将输入的 n 个数进行排序,可以使用快速排序等算法。
2. 对于每个询问 [L, R],在已排序的数列中二分查找 L 和 R 的位置,分别记为 l 和 r。
3. 计算区间 [L, R] 中最大值和最小值的差,即极差,记为 rang。
4. 计算区间 [L, R] 中数值的平均值,记为 mean。
5. 根据公式误差范围 = rang / mean,计算出该区间的误差范围。
6. 输出每一个 [L, R] 的误差范围。
具体实现可以参考下面的 Python 代码:
```python
n, m = map(int, input().split())
a = list(map(int, input().split()))
a.sort() # 排序
for i in range(m):
l, r = map(int, input().split())
pos_l = bisect_left(a, l) # 二分查找左端点位置
pos_r = bisect_right(a, r) # 二分查找右端点位置
if pos_l == n or a[pos_l] > r: # 左端点大于区间右端点
print("0.00%") # 输出误差范围为 0
else:
sub_arr = a[pos_l:pos_r] # 切片获取区间 [L, R] 中的数列
rang = sub_arr[-1] - sub_arr[0] # 计算极差
mean = sum(sub_arr) / len(sub_arr) # 计算平均值
error = rang / mean * 100 # 计算误差范围
print("{:.2f}%".format(error)) # 输出结果
```
希望我的回答能够帮助到您!
阅读全文