真正的最完整题解
2025-05-12 20:50:13
发布于:浙江
4阅读
0回复
0点赞
不得不说,ACGO数据水了。
拿到题,废话不多说,直接暴力!
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int a[1000005];
signed main() {
cin>>n>>m;
for(int i = 1;i<=n;i++){
cin>>a[i];
}
while(m--){
int l,r;
cin>>l>>r;
int ans = 0;
for(int j = l;j<=r;j++){
ans+=a[j];
}
cout<<ans<<'\n';
}
return 0;
}
这肯定是不……不儿,啦?
当然,按常理来说,的数据的时间复杂度一定会的。
所以,换思路!
首先,我们先来进食一下“前缀和”的知识点。
第一步,准备一个sum
数组,就像这样:int sum[1000005];
。
第二步,预处理sum
数组,sum[i]
就表示a[1]
到a[n]
这个区间的和。代码:sum[i]=sum[i-1]+a[i];
接下来怎么计算呢?
请看图片:
借助这个思路,成功!
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int a[1000005];
int sum[1000005];
signed main() {
cin>>n>>m;
for(int i = 1;i<=n;i++){
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}
while(m--){
int l,r;
cin>>l>>r;
cout<<sum[r]-sum[l-1];
}
return 0;
}
全部评论 5
ddd
2025-05-12 来自 浙江
0ddd
2025-05-12 来自 浙江
0ddd
2025-05-12 来自 浙江
0ddd
2025-05-12 来自 浙江
0ddd
2025-05-12 来自 浙江
0
有帮助,赞一个