ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

经典算法题--给指定编号区间的小朋友发糖

2021-12-01 01:00:24  阅读:135  来源: 互联网

标签:map arr 每个 发糖 -- 编号 区间 小朋友


# 有n个小朋友,从1到n编号。
# 老师给小朋友们发糖,每次给编号在[s,r]内的每个小朋友一颗糖。
# 已知每个小朋友在最开始都是有0颗糖,老师一共发了m次糖,求此时每个小朋友各有几颗糖
#
# 输入:第一行输入n和m
# 接下来m行,每行给出2个数,s与r,标定区间
# 输出:n个整数,即老师给了m次糖以后每个小朋友各有几颗糖

 1 n,m = list(map(int,input().strip().split()))
 2 arr = [0] * n
 3 for i in range(m):
 4     s,r = list(map(int,input().strip().split()))
 5     arr[s-1] += 1
 6     if r!= n:
 7         arr[r] -= 1
 8 for i in range(1,n):
 9     arr[i] = arr[i-1]+arr[i]
10 
11 print(' '.join(map(str,arr)))

 

分析:这是个典型的区间更新+单点查询的题型

这种题目下,当在[s,r]区间内每个数加1,在左端点处+1,在右端点后一位(r+1)处减去1,如此查询点被覆盖多少次,求出前缀的和即可

标签:map,arr,每个,发糖,--,编号,区间,小朋友
来源: https://www.cnblogs.com/fcbyoung/p/15627201.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有