Problem:
Score : 400 points

Problem Statement

We have N+1 integers: 10^{100}, 10^{100}+1, ..., 10^{100}+N.

We will choose K or more of these integers. Find the number of possible values of the sum of the chosen numbers, modulo (10^9+7).

Constraints

1 \leq N \leq 2\times 10^5

1 \leq K \leq N+1

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K

Output

Print the number of possible values of the sum, modulo (10^9+7).

Sample Input 1

3 2

Sample Output 1

10

The sum can take 10 values, as follows:

(10^{100})+(10^{100}+1)=2\times 10^{100}+1

(10^{100})+(10^{100}+2)=2\times 10^{100}+2

(10^{100})+(10^{100}+3)=(10^{100}+1)+(10^{100}+2)=2\times 10^{100}+3

(10^{100}+1)+(10^{100}+3)=2\times 10^{100}+4

(10^{100}+2)+(10^{100}+3)=2\times 10^{100}+5

(10^{100})+(10^{100}+1)+(10^{100}+2)=3\times 10^{100}+3

(10^{100})+(10^{100}+1)+(10^{100}+3)=3\times 10^{100}+4

(10^{100})+(10^{100}+2)+(10^{100}+3)=3\times 10^{100}+5

(10^{100}+1)+(10^{100}+2)+(10^{100}+3)=3\times 10^{100}+6

(10^{100})+(10^{100}+1)+(10^{100}+2)+(10^{100}+3)=4\times 10^{100}+6

Sample Input 2

200000 200001

Sample Output 2

1

We must choose all of the integers, so the sum can take just 1 value.

Sample Input 3

141421 35623

Sample Output 3

220280457

Solution in C++ (GCC 9.2.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;
#define m 1000000007
int main() {
	int n , k;
	int ans = 0;
	cin >> n >> k;
	int a[n+1];
	for(int i = 0 ; i <= n ; i++)a[i] = i;
	long long int pre[n+1], suf[n+1];
	memset(pre,0,sizeof(pre));
	memset(suf,0,sizeof(suf));
	for(int i = 0 ; i <= n; i++){
		if(i == 0)pre[i] = a[i];
		else pre[i] = pre[i-1]+a[i];
	}
	for(int i = n ; i>= 0;i--){
		if( i == n )suf[i] = a[i];
		else suf[i] = suf[i+1]+a[i];
	}
	int l = k-1;
	int r = n-k+1;
	while(l <= n && r >= 0){
		ans = (ans + (suf[r]-pre[l]+1))%m;
		l++;
		r--;
	}
	cout<<ans<<"\n";
	return 0;
}