4 solutions
-
4
#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++
-
1
#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
#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
数组要开大
#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