运用前缀和知识可以大大缩减程序的时间复杂度。(简洁
前缀和思想:
- 先求整个数列的和。在输入时预处理前缀和,不用从头再从头遍历。
- 预处理完成,求 [a, b] 区间的和直接用公式 p[a, b] = p[b] - p[a-1]。
- 时间复杂度降至 O(1).
例题
USACO USACO 2017 December Contest, Silver Problem 1. My Cow Ate My Homework
大意:给出一串成绩,牛吃掉了从第一个到第K个成绩,剩下的成绩去掉最小值,求现在剩下的成绩最大值。(练习英语
解题要点:
- 预处理当前(当前位置到最后位置)最小值
- score用double保存
- 因为要output all values of K,所以用vector来存一下下标
代码
#include<bits/stdc++.h>
using namespace std;
const int M=1e5+1;
int numbers[M];
int prefix_sum[M];
int min_value[M];
int main(){
fr