給出一個大小爲N的列表,用零初始化。您必須在列表中執行M個操作,並輸出列表中所有N個元素的最大值的最大值。對於每一個操作,你都給出了三個整數a,b和k,並且你必須增加從索引到(包括兩個端點)在內的所有元素的值。理解數組行爲的算法
輸入格式
第一行包含兩個整數N和M由單個空格分開。 接下來的M行將包含由一個空格分隔的三個整數a,b和k。 列表中的數字從1到N編號。
約束
Click here
輸出格式
在更新後的列表包含最大值的單個線。
採樣輸入
樣本輸出
說明
後第一更新列表將是100 100 0 0 0
後第二更新列表將是100 200 100 100 100
後第三更新列表將是100 200 200 200 100
所以所需的答案是200
一種解決方案用更少的時間複雜度
n, inputs = [int(n) for n in input().split(" ")]
list = [0]*(n+1)
for _ in range(inputs):
x, y, incr = [int(n) for n in input().split(" ")]
list[x-1] += incr
if((y)<=len(list)):
list[y] -= incr
max = x = 0
for i in list:
x=x+i;
if(max<x):max=x
print(max)
有人可以解釋上述解決方案嗎?
這是一個* active *編程比賽嗎? –
不是。這是黑客行爲的一個實踐問題。 –