2180年奥运会竞技类分会场,将在XX市举行。会场自然是政府的事情,我们就别操心了。艾瑞克却被兴奋而苦恼的情绪折磨着,他的宾馆是XX市最好的宾馆,近期旅客投宿的订单m份接踵而至,时间从1~n天,这代表着大把大把的银子,可是他最多只能提供k间客房,更多的他只能提前去租附近的房子并赶紧装修一下,时间很紧啊。
艾瑞克找到了他最好的朋友你:“哪,这是所有的订单,你给我在1s内计算出最高峰时,超出多少间客房,这样我才能知道得去租多少房子啊。”
每张订单包含dj,sj,tj:表示从第sj日至第tj日,预定房间dj间。
住:为了简单起见,假设第一天之前宾馆所有的房间都是空的。
第一行包含两个正整数n,m,k,表示天数、订单的数量,和现有客房数。
接下来有m行,每行包含三个正整数dj,sj,tj,表示租借的数量,租借开始、结束分别在第几天。
每行相邻的两个数之间均用一个空格隔开。天数与订单均用从1开始的整数编号。
只有一个整数,表示最高峰时还差多少客房,客房足够输出0(骗不到分)。
4 3 6
2 1 3
3 2 4
4 2 4
3
时间:1s 空间:512M
1<=n,m<=1000,000;1<=sj<=tj<=n;1<=k,dj<=1000;
输入数据较大,最好加外挂
【以下回答由 GPT 生成】
这个问题可以通过使用差分数组来解决。差分数组可以用来记录相邻元素之间的差值,这样可以在O(1)的时间内更新某一范围内的元素。我们可以使用差分数组来记录每一天需要的客房数量,然后累积这些差分值,得到每一天预订的客房数量。
以下是解决该问题的具体步骤:
下面是使用Python实现该解决方案的代码:
n, m, k = map(int, input().split())
diff = [0] * (n + 1)
for _ in range(m):
dj, sj, tj = map(int, input().split())
diff[sj] += dj
diff[tj + 1] -= dj
maxRooms = 0
rooms = k
for i in range(1, n + 1):
rooms += diff[i]
maxRooms = max(maxRooms, rooms)
shortage = maxRooms - k
print(shortage)
该算法的时间复杂度为O(m+n),适用于输入规模较大的情况。
【相关推荐】