题目描述
解题思路
1.利用前缀和算法优化代码运行速度,每个出行计划就是对有效区间的划定,最后在利用前缀和统计,在对其进行查询即可。
代码实现
# 读入三个整数n、m 和 k
n, m, k = map(int,input().split())
# 读入包含 n 个子列表的列表,每个子列表包含两个整数
points = [[i for i in map(int, input().split())] for j in range(n)]
# 找到所有子列表中第一个整数的最大值 num,并处理子列表以确保第二个整数表示最后一个有效整数
num = 0
for i in range(n):
if num < points[i][0]: num = points[i][0]+1
points[i][0], points[i][1] = max(1,points[i][0]-points[i][1]+1), points[i][0]
# 读入包含 m 个整数的列表,并将每个整数加上 k,存入 times 列表
times = []
for i in range(m):
point = int(input()) times.append(point+k)
# 创建长度为 num*2 的临时列表 list_temp,用零初始化 list_temp = [0 for i in range(num*2)]
# 对于每个子列表,将位于该子列表第一个整数处的索引处的值加 1,将位于该子列表第二个整数+1 处的索引处的值减 1。
for point in points: list_temp[point[0]] += 1
list_temp[point[1]+1] -= 1
# 计算临时列表的前缀和
for i in range(1,num+1): list_temp[i] += list_temp[i-1]
# 对于 times 列表中的每个整数,在临时列表 list_temp 中打印索引等于(该整数+k)的值
for time in times: print(list_temp[time])