defsolve(): n, m = map(int, input().split()) A = array("l", map(int, input().split()))
D = array("l", []) L = array("l", []) R = array("l", []) for _ inrange(m): d, l, r = map(int, input().split()) D.append(d) L.append(l - 1) R.append(r - 1)
diff = array("l", [0] * (n + 1))
defcheck(mid: int) -> bool: # 重置差分陣列 for i inrange(n + 1): diff[i] = 0 # 套用前 mid 個訂單的區間增加 for i inrange(mid): d, l, r = D[i], L[i], R[i] diff[l] += d diff[r + 1] -= d # 前綴和還原每日用量 for i inrange(1, n): diff[i] += diff[i - 1] # 檢查是否超出容量 returnall(diff[i] <= A[i] for i inrange(n))
left, right = 0, m while left <= right: mid = (left + right) // 2 if check(mid): left = mid + 1 else: right = mid - 1 # left 是第一個失敗的訂單編號(1-based) if left <= m: print(-1, left, sep="\n") else: print(0)
defsolve(): n, m = map(int, input().split()) A = array("l", map(int, input().split())) D = array("l", []) L = array("l", []) R = array("l", []) for _ inrange(m): d, l, r = map(int, input().split()) D.append(d) L.append(l - 1) R.append(r - 1)
diff = [0] * (n + 1) for d, l, r inzip(D, L, R): diff[l] += d diff[r + 1] -= d
s = 0 k = m - 1 for i, x inenumerate(A): s += diff[i] while k >= 0and s > x: v, l, r = D[k], L[k], R[k] diff[l] -= v diff[r + 1] += v if l <= i <= r: s -= v k -= 1 if s > x: break
if k < m - 1: # 有不能被滿足的需求 print(-1) print(k + 2) # k + 1 是第一個不能被滿足的需求,轉換為 1-index 後是 k + 2 else: print(0)