Update
This commit is contained in:
@@ -93,7 +93,6 @@ int main() {
|
||||
|
||||

|
||||
|
||||
|
||||
如果,我们想统计,在vec数组上 下标 2 到下标 5 之间的累加和,那是不是就用 p[5] - p[1] 就可以了。
|
||||
|
||||
为什么呢?
|
||||
@@ -114,7 +113,11 @@ p[5] - p[1] 就是 红色部分的区间和。
|
||||
|
||||
而 p 数组是我们之前就计算好的累加和,所以后面每次求区间和的之后 我们只需要 O(1)的操作。
|
||||
|
||||
**特别注意**: 在使用前缀和求解的时候,要特别注意 求解区间。
|
||||
|
||||
如上图,如果我们要求 区间下标 [2, 5] 的区间和,那么应该是 p[5] - p[1],而不是 p[5] - p[2]。
|
||||
|
||||
很多录友在使用前缀和的时候,分不清前缀和的区间,建议画一画图,模拟一下 思路会更清晰。
|
||||
|
||||
```CPP
|
||||
#include <iostream>
|
||||
@@ -142,6 +145,8 @@ int main() {
|
||||
|
||||
```
|
||||
|
||||
C++ 代码 面对大量数据 读取 输出操作,最好用scanf 和 printf,耗时会小很多:
|
||||
|
||||
```CPP
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
@@ -168,24 +173,89 @@ int main() {
|
||||
|
||||
```
|
||||
|
||||
```CPP
|
||||
## 其他语言版本
|
||||
|
||||
#include<bits/stdc++.h>
|
||||
using namespace std;
|
||||
### Java
|
||||
|
||||
```Java
|
||||
|
||||
int main(){
|
||||
int n, a, b;
|
||||
cin >> n;
|
||||
vector<int> vec(n + 1);
|
||||
vector<int> p(n + 1, 0);
|
||||
for(int i = 1; i <= n; i++) {
|
||||
scanf("%d", &vec[i]);
|
||||
p[i] = p[i - 1] + vec[i];
|
||||
import java.util.Scanner;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
|
||||
int n = scanner.nextInt();
|
||||
int[] vec = new int[n];
|
||||
int[] p = new int[n];
|
||||
|
||||
int presum = 0;
|
||||
for (int i = 0; i < n; i++) {
|
||||
vec[i] = scanner.nextInt();
|
||||
presum += vec[i];
|
||||
p[i] = presum;
|
||||
}
|
||||
|
||||
while (scanner.hasNextInt()) {
|
||||
int a = scanner.nextInt();
|
||||
int b = scanner.nextInt();
|
||||
|
||||
int sum;
|
||||
if (a == 0) {
|
||||
sum = p[b];
|
||||
} else {
|
||||
sum = p[b] - p[a - 1];
|
||||
}
|
||||
System.out.println(sum);
|
||||
}
|
||||
|
||||
scanner.close();
|
||||
}
|
||||
while(~scanf("%d%d", &a, &b)){
|
||||
printf("%d\n", p[b + 1] - p[a]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
### Python
|
||||
|
||||
```python
|
||||
|
||||
import sys
|
||||
input = sys.stdin.read
|
||||
|
||||
def main():
|
||||
data = input().split()
|
||||
index = 0
|
||||
n = int(data[index])
|
||||
index += 1
|
||||
vec = []
|
||||
for i in range(n):
|
||||
vec.append(int(data[index + i]))
|
||||
index += n
|
||||
|
||||
p = [0] * n
|
||||
presum = 0
|
||||
for i in range(n):
|
||||
presum += vec[i]
|
||||
p[i] = presum
|
||||
|
||||
results = []
|
||||
while index < len(data):
|
||||
a = int(data[index])
|
||||
b = int(data[index + 1])
|
||||
index += 2
|
||||
|
||||
if a == 0:
|
||||
sum_value = p[b]
|
||||
else:
|
||||
sum_value = p[b] - p[a - 1]
|
||||
|
||||
results.append(sum_value)
|
||||
|
||||
for result in results:
|
||||
print(result)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user