题解 | 剩下的树

剩下的树

https://www.nowcoder.com/practice/f5787c69f5cf41499ba4706bc93700a2?tpId=40&tqId=21356&rp=1&difficulty=&judgeStatus=&tags=/question-ranking

import sys
def remove(total,num,it):
    data=[]
    for _ in range(num):
        tem=list(map(int,next(it).strip('\n').split()))
        data.append(tem)
    data=sorted(data,key=lambda x:x[0])
    right=data[0][1]
    left=data[0][0]
    remove=0
    for i in range(1,num):
        if data[i][0]>right:
            remove+=right-left+1
            left=data[i][0]
            right=data[i][1]
        else:
            right=max(data[i][1],right)
    remove+=right-left+1
    print(total-remove)
if __name__ =='__main__':
    it=iter(sys.stdin)
    while 1:
        try:
            tem=list(map(int,next(it).strip('\n').split()))
            total=tem[0]+1
            num=tem[1]
            remove(total,num,it)
        except:
            break

贪心算法维护重叠子区间的范围并计算移除的树

全部评论

相关推荐

Gardenia06...:刚开始学是这样的,可以看看左神和灵神都讲的不错
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务