前缀后缀值
前缀后缀和
vector<long> presum(nums.size(), 0);
if (nums.size() > 0) presum[0] = nums[0];
for (int i = 1; i < nums.size(); i++) {
presum[i] = presum[i-1] + nums[i];
}
vector<long> sufsum(nums.size(), 0);
if (nums.size() > 0) sufsum[nums.size() -1] = nums[nums.size() -1];
for (int i = nums.size() - 1; i >= 0; i--) {
sufsum[i] = sufsum[i+1] + nums[i];
}
前缀后缀最大
vector<long> premax(nums.size(), 0);
if (nums.size() > 0) premax[0] = nums[0];
for (int i = 1; i < nums.size(); i++) {
premax[i] = max(premax[i-1], nums[i]);
}
vector<long> sufmax(nums.size(), 0);
if (nums.size() > 0) sufmax[nums.size() -1] = nums[nums.size() -1];
for (int i = nums.size() - 1; i >= 0; i--) {
premax[i] = max(premax[i+1], nums[i]);
}
前缀后缀最小
vector<long> premin(nums.size(), 0);
if (nums.size() > 0) premin[0] = nums[0];
for (int i = 1; i < nums.size(); i++) {
premin[i] = min(premin[i-1], nums[i]);
}
vector<long> sufmin(nums.size(), 0);
if (nums.size() > 0) sufmin[nums.size() -1] = nums[nums.size() -1];
for (int i = nums.size() - 1; i >= 0; i--) {
premin[i] = min(premin[i+1], nums[i]);
}