D - Sum of Large Numbers

D - Sum of Large Numbers。
累積和を使ういい問題。

def solve():  
    N, K = map(int, input().split())
    mod = 10**9+7

    increments = []

    for i in range(N+1):
        increments.append(i)

    accumulation = [0]*(N+2)
    accumulationReverse = [0]*(N+2)

    for i in range(0, N+1):
        accumulation[i+1] = accumulation[i] + increments[i]
        accumulationReverse[i+1] = accumulationReverse[i] + increments[N-i]

    ans = 0

    for i in range(K, N+2):
        ans += accumulationReverse[i]-accumulation[i] + 1

    print(ans % mod)


if __name__ == "__main__":  
    solve()

各組み合わせにおいて、最小になる累積和accumulationと最大になる累積和accumulationReverseを引いていく。