题解分享
题解分享简介
一维前缀和 - 题解
```
n = int(input())
ls = [0]+ list(map(int, input().split()))
sumls = [0]*(n+1)
for i in range(1,n+1):
sumls[i] = sumls[i-1]+ls[i]
k = int(input())
for i in range(k):
l,r = map(int, input().split())
print(sumls[r]-sumls[l-1])
```
查看全文
0
0
1
2
一维前缀和 - 题解
```
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
//接收动态数组
vector<int> arr(n);
for ( int i = 0; i < n; i++ ) {
cin >> arr[i];
}
//前缀和数组
vector<int> prefix(n + 1, 0);
for ( int i = 1; i <= n; i++ ) {
prefix[i] = prefix[i - 1] + arr[i - 1];
}
//输出范围和
int m;
cin >> m;
for ( int i = 0; i < m; i++ ) {
int a , b;
cin >> a >> b;
cout << prefix[b] - prefix[a - 1] << endl;
}
return 0;
}
```
查看全文
0
0
0
6
一维前缀和 - 题解
```
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int sum[N];
int main(){
int n, k;
sum[0] = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
sum[i] = sum[i - 1] + x;
}
cin >> k;
for (int i = 0; i < k; i++) {
int l, r;
cin >> l >> r;
cout << sum[r] - sum[l - 1] << endl;
}
return 0;
}
```
查看全文
0
0
0
3
一维前缀和 - 题解
```cpp
// https://dashoj.com/p/87
#include <bits/stdc++.h>
#define N 100010
using namespace std;
typedef long long ll;
ll n, k;
vector<int> ls(N, 0);
vector<int> qzh(N, 0);
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
cin >> n;
for (int i = 1; i <= n; i++) cin >> ls[i];
for (int i = 1; i <= n; i++) qzh[i] = qzh[i - 1] + ls[i];
cin >> k;
while (k--) {
int l, r;
cin >> l >> r;
cout << qzh[r] - qzh[l - 1] << endl;
}
return 0;
}
```
查看全文
0
0
0
2
一维前缀和 - 题解
```
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n,x;
int a[N],sum[N];
int main(){
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1; i<=n; i++){
cin>>a[i];
}
sum[1] = a[1];
for(int i=2; i<=n; i++){
sum[i]=a[i]+sum[i-1];
}
cin>>x;
while(x--){
int l,r;
cin>>l>>r;
cout<<sum[r]-sum[l-1]<<endl;
}
return 0;
}
```
查看全文
0
0
0
5
一维前缀和 - 题解
```
from itertools import accumulate
n = int(input())
arr = list(map(int, input().split()))
k = int(input())
S = [0] + list(accumulate(arr))
for _ in range(k):
l, r = map(int, input().split())
print(S[r] - S[l - 1])
```
查看全文
0
0
0
2
一维前缀和 - 题解
```
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,q;
int arr[N];
int prefinx[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>arr[i];
}
for(int i=1;i<=n;i++){
prefinx[i]=prefinx[i-1]+arr[i];
}
cin>>q;
while(q--){
int l,r;
cin>>l>>r;
cout<<prefinx[r]-prefinx[l-1]<<endl;
}
return 0;
}
```
查看全文
0
0
0
2
一维前缀和 - 题解
帮忙看看有什么可以优化嘛👀️
```
//用全能头
#include <bits/stdc++.h>
using namespace std;
int main()
{
//输入数组长度n,cir再赋一遍
int n, cir;
cin >> n;
cir = n;
//初始化数组number、sum还有累计和add
//最后前缀和减需要i-1位所以index0拿来做被减头
int number[n] = {0};
int sum[n] = {0};
sum[0] = 0;
int add = 0;
//循环输入数组,注意sum从第二开始赋值
while(cir)
{
cin >> number[n-cir];
add += number[n-cir];
sum[n-cir+1] = add;
cir--;
}
//输入多少组测试times
int times = 0;
cin >> times;
//输入左右索引l,r
int l, r;
//运算后按格式输出
while(times)
{
cin >> l;
cin >> r;
cout << sum[r] - sum[l-1] << endl;
times--;
}
}
```
查看全文
0
0
0
2



