跳转至

前缀后缀值

前缀后缀和

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]);
}