1 条题解

  • 0
    @ 2026-3-10 10:28:18

    实际上这种操作区间使得数组到一个固定值(比如减少到全0)都可以用差分来做,而实际上的操作次数就是差分数组中正数的和,如果c[i]>0,表示需要在这段开始一个新的区间,所有c[i]>0的和,就是所有区间“起点”处的增量总和,也就是总的区间左端点选择次数。

    不过在这里我们算差分数组前需要将a里面的元素统一减1,因为目标是全1不是全0,最后统计加和输出结果即可。

    import sys
    input = lambda:sys.stdin.readline().strip()
    
    n=int(input())
    a=[0]+list(map(int,input().split()))+[0]
    c=[0]*len(a)
    
    for i in range(1,n+1):
        a[i] = a[i] - 1
    
    for i in range(1,n+1):
        c[i] = a[i] - a[i-1]
    
    ans=0
    for i in c:
        if i>0:ans+=i
    print(ans)
    
    • 1

    信息

    ID
    335
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    138
    已通过
    47
    上传者