优选算法第四讲:前缀和模块
1.[模板]前缀和
链接: link
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n = 0, q = 0;
cin >> n >> q;
vector<int> arr(n+1);//开辟一个n+1的数组
for(int i = 1; i <= n; i++) cin >> arr[i];
//创建一个前缀和数组。vector的构造会自己初始化
vector<long long> dp(n+1);
//更新前缀和数组
for(int i = 1; i<=n; i++) dp[i] = dp[i-1] + arr[i];
//直接使用前缀和数组进行返回即可
int l = 0, r = 0;
while(q--)
{
cin >> l >> r;
cout << dp[r] - dp[l-1] << endl;//直接输出结果即可
}
return 0;
}
2.【模板】二维前缀和
链接: link
3.寻找数组的中心下标
链接: link
class Solution {
public:
int pivotIndex(vector<int>& nums) {
int n = nums.size();
vector<int> f(n), g(n);
//1.分别求出前缀和、后缀和数组
for(