NC54749数列求和
链接:https://ac.nowcoder.com/acm/problem/54749
来源:牛客网
很经典的一道题,就是前缀和思想的应用:求数列在区间(i,r)内的和转换为前r项和减去前i-1项和。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e9+7;
const ll nl=500000004;
ll transfer(ll i){
return ((i%N) * (( (i+1)%N ) * nl % N ) % N ) * ((2*i + 1)%N) % N;
}
int main(){
int q;
cin>>q;
while(q--){
ll l,r;
cin>>l>>r;
cout<<(transfer(r)-transfer(l-1)+r-l+1+N)%N<<endl;
}
}
前缀和问题大多是大数据,这里有对除法运算取模的操作,转换成乘除数的逆元操作来保持精度。
对于这里的运算令b × x ≡ 1 (mod N)则此时 (a ÷ b) mod N 就等价于 (a × x) mod N。
来源:牛客网
很经典的一道题,就是前缀和思想的应用:求数列在区间(i,r)内的和转换为前r项和减去前i-1项和。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e9+7;
const ll nl=500000004;
ll transfer(ll i){
return ((i%N) * (( (i+1)%N ) * nl % N ) % N ) * ((2*i + 1)%N) % N;
}
int main(){
int q;
cin>>q;
while(q--){
ll l,r;
cin>>l>>r;
cout<<(transfer(r)-transfer(l-1)+r-l+1+N)%N<<endl;
}
}
前缀和问题大多是大数据,这里有对除法运算取模的操作,转换成乘除数的逆元操作来保持精度。
对于这里的运算令b × x ≡ 1 (mod N)则此时 (a ÷ b) mod N 就等价于 (a × x) mod N。
全部评论
相关推荐
点赞 评论 收藏
分享
02-26 10:01
南方科技大学 产品经理 点赞 评论 收藏
分享
纳斯卡可:这算法全是Hard题
查看28道真题和解析 点赞 评论 收藏
分享
