菜鸟笔记-Python例题(4)

题目描述

 

 解题思路

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])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值