前缀和高效方案
2024-06-30 20:49:31
发布于:广东
10阅读
0回复
0点赞
这题有多种方法。
暴力破解当然是可以的,但可能会超时,所以得用聪明一点的办法!
具体思路如下:
假设数组为:1 2 3 4 5
先设一个前缀和数组S,求原数组的前缀和
for(int i=1; i<=n; i++)
{
cin>>a[i];
s[i]=s[i-1]+a[i];
}
这样就完成了基础操作。
接下来就要用到特殊的办法了:
设我们要求[2]到[4],其实就是求[1]到[4]减[1]
其实就是s[r]-s[l-1]
即:
while(m--)
{
int l,r;
cin>>l>>r;
cout<<s[r]-s[l-1]<<endl;
}
下面是完整代码:
#include <iostream>
using namespace std;
int a[10000005],n,m;
int s[10000005];
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++)
{
cin>>a[i];
s[i]=s[i-1]+a[i];
}
while(m--)
{
int l,r;
cin>>l>>r;
cout<<s[r]-s[l-1]<<endl;
}
return 0;
}
求小赞一个。Thanks♪(・ω・)ノ
这里空空如也
有帮助,赞一个