NC54749. 数列求和
描述
输入描述
第一行输入一个整数q,代表q 次询问。
接下来q行,每行输入两个整数l , r代表询问的区间。第一行输入一个整数q,代表q 次询问。
接下来q行,每行输入两个整数l , r代表询问的区间。
输出描述
输出q行,每行一个整数表示当前询问的答案。
示例1
输入:
1 1 99
输出:
985149
C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 388K, 提交时间: 2023-05-25 17:44:42
#include<bits/stdc++.h> using namespace std; const int N=1e9+7; long long ma(long long k) { if(k==0) return 0; else return (((((k%N)*((k+1)%N)/2)%N)*((2*k+1)%N))%N+(k%N)); } int main() { int t; cin>>t; while(t--) { long long l,r; cin>>r>>l; cout<<(ma(l)-ma(r-1)+N)%N<<endl; } return 0; }
Python3 解法, 执行用时: 33ms, 内存消耗: 4664K, 提交时间: 2022-01-01 22:19:21
m=int(1e9+7) def f(x):return (x*(x+1)*(2*x+1)//2+x)%m for _ in range(int(input())): l,r=map(int,input().split()) print((f(r)-f(l-1))%m)