C++ 前缀和

有一个数组{2,1,3,6,4},询问三次结果:a[5] = {2, 1, 3, 6, 4}

1. 数组第1到第2个元素的和是多少?

2. 数组第1到第3个元素的和是多少?

3. 数组第2到第4个元素的和是多少?

原始方法(无前缀和):

 1 #include<iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4 int main(){
 5     int a[5]={2,1,3,6,4};
 6     for(int i=0;i<3;i++){
 7         int l,r;//TODO
 8         cin>>l>>r;
 9         
10         int sum=0;
11         for(int j=l-1;j<r;j++){
12             sum+=a[j];
13         }
14         
15         cout<<"sum:"<<sum<<endl;
16     }
17 
18     return 0;
19 }
原始暴力算法

前缀和方法:

 1 #include<iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4 int main(){
 5     int a[5]={2,1,3,6,4};
 6     int s[6];
 7     s[0]=0;
 8     
 9     for(int i=0;i<6;i++){
10         s[i]=s[i-1]+a[i-1];
11     }
12     
13     for(int i=0;i<3;i++){
14         int l,r;
15         cin>>l>>r;
16         cout<<s[r]-s[l-1]<<endl;
17     }
18 
19     return 0;
20 }
前缀和方法

 

posted @ 2025-01-05 15:48  SIPnnnnn  阅读(18)  评论(0)    收藏  举报