1 条题解
-
1
superduo LV 2 MOD @ 2025-07-27 10:15:06
这道题目很明显,普通的做法就是给定l,r,用一个for循环枚举这个区间,求和输出,代码如下:
#include<iostream> using namespace std; int main() { int n,q; cin>>n>>q; int a[100010],dp[100010]; for(int i=1;i<=n;i++) cin>>a[i]; while(q--) { int l,r; cin>>l>>r; int sum=0; for(int i=l;i<=r;i++) sum+=a[i]; cout<<sum<<endl; } return 0; }
但是,我们观察数据范围:对于\(100\)%的数据,\(n,q≤10^5\)
上面的代码时间复杂度为O(n²),上面的代码很可能会超时TLE。
在观察一下题目,这道题不就是前缀和吗?
前缀和的区间和。
那么区间和代码就不用说了,相信大家都会。不会的去这篇文章看:https://www.luogu.com.cn/article/5q66tgtj
代码如下:#include<iostream> using namespace std; int main() { int n,q; cin>>n>>q; int a[100010],dp[100010]; for(int i=1;i<=n;i++) { cin>>a[i]; if(i==1) dp[i]=a[i]; else dp[i]=dp[i-1]+a[i]; } while(q--) { int l,r; cin>>l>>r; cout<<dp[r]-dp[l-1]<<endl; } return 0; }
这道题就AC了,是不是非常的简单(难怪是CSP-J的T1,虽然是模拟赛)
- 1