这题python3能不能过啊,二分
查看原帖
这题python3能不能过啊,二分
514478
wuwuwuyingyingying楼主2021/6/26 19:59
#二分 + 差分
n,m = map(int,input().split())
dayshave = list(map(int, input().split()))
order = [] #订单
t = m
while t:
    order.append(list(map(int, input().split())))
    t -= 1

'''
#暴力
ans = 0
flag = False
for i in range(m):
    for j in range(order[i][1]- 1 , order[i][2]):
        dayshave[j] -= order[i][0]
        if dayshave[j] < 0 :
            ans = i
            flag = True
            break
    if flag:
        break
        
if flag:
    print(-1)
    print(ans + 1)
else:
    print(0)
'''
            
            
    
def check(mid):
    cf = chafen[:]
    for d , s , t in order[ : mid + 1]:
        cf[s-1] -= d #下标要-1
        if t < n:
            cf[t - 1 + 1] += d
    
    res = 0 #前缀和还原数组
    for i in cf:
        res += i
        if res < 0 :
            return False
    return True


#差分数组
chafen = [dayshave[0]]
for i in range(1,n):
    chafen.append(dayshave[i] - dayshave[i - 1])
    
def main():
    
    if check(m-1):
        #最后一个满足
        print(0)
        return
    
    #肯定有不满足
    left = 0
    right = m
    while left < right:
        mid = (left + right ) // 2
        if check(mid):
            left = mid + 1
        else:
            right = mid #有可能是自己
    
    
    print(-1)
    print(left + 1)

main()
 
        

超时呢

2021/6/26 19:59
加载中...