4 solutions

  • 4
    @ 2024-4-20 15:23:59
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+5;//亲测164000过不了
    int pfS[maxn]={0};//prefixSum(前缀和)数组
    int a[maxn];
    int n,m;
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){//适配题目,从1开始
    		cin>>a[i];
    	}
    	cin>>m;
    	for(int i=1;i<=n;i++){
    		pfS[i]=pfS[i-1]+a[i];//前缀和
    	}
    	for(int i=1;i<=m;i++){
    		int l,r;
    		cin>>l>>r;
    		cout<<pfS[r]-pfS[l-1]<<endl;//要注意这里是左开右闭
    	}
    	return 0;
    }
    

    C++

    • @ 2024-4-20 15:26:55
      #include<bits/stdc++.h>
      using namespace std;
      int n,m;
      int a[1000005];
      int vst[1000005]={};
      int main(){
      	cin>>n;
      
      	for(int i=1;i<=n;i++){
      		cin>>a[i];
      		vst[i]=vst[i-1]+a[i];
      	}
      //可以这么改,合一起
      
      	cin>>m;
      	for(int i=1;i<=m;i++){
      
      		int h,r;
      		cin>>h>>r;
      		cout<<vst[r]-vst[h-1]<<"\n";
      	}
      	return 0;
      }
      
  • 1
    @ 2024-3-1 19:38:47
    #include<iostream>
    using namespace std;
    int a[114514],b[114514];
    int main()
    {
    	int n,m;
    	cin>>n;//输入
    	for(int i=0;i<n;i++)
    	{
    		cin>>a[i];//输入
    	}
    	cin>>m;//输入
    	b[0]=a[0];//初始化
    	for(int i=1;i<n;i++)
    	{
    		b[i]=b[i-1]+a[i];//前一项与这一项的和
    	}
    	while(m--)
    	{
    		int l,r;
    		cin>>l>>r;//区间
    		cout<<b[r-1]-b[l-1-1]<<endl;//求差
    	}
    	return 0;//完结散花
    }
    
    • 0
      @ 2024-3-1 19:46:25
      #include <bits/stdc++.h>
      using namespace std;
      int a[100005],b[100005];
      int main(int argc, char **argv){
      	int n,m;
      	cin >> n;
      	for (int i = 1;i <= n;i++){
      		cin >> a[i];
      		b[i] = b[i - 1] + a[i];	// 前缀和
      	}
      	cin >> m;
      	while (m--){
      		int l,r;
      		cin >> l >> r;	// 区间
      		printf("%d\n",b[r] - b[l - 1]);	// 区间和
      	}
      	return 0;
      }
      
    • -1
      @ 2024-3-1 19:50:33

      数组要开大

      #include<bits/stdc++.h>
      using namespace std;
      int arr[101000],brr[101000];
      void hs(int n){
          for(int i=0;i<n;i++){
              if(i!=0)brr[i]=arr[i]+brr[i-1];
              else brr[i]=arr[i];
          }
      }
      int main(){
          int n,m;
          cin>>n;
          for(int i=0;i<n;i++) cin>>arr[i];
          cin>>m;
          hs(n);
          while(m--){
              int l,r;
              cin>>l>>r;
              if(l-2>=0)cout<<brr[r-1]-brr[l-2]<<endl;
              else cout<<brr[r-1]<<endl;
          }
          return 0;
      }
      
    • 1

    Information

    ID
    1010
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    4
    Tags
    (None)
    # Submissions
    100
    Accepted
    47
    Uploaded By