Dmaxiya

[蓝桥杯 2026 省 A] 综合应变指标 参考代码

Apr 12th, 2026 (edited)
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.15 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long getSum(vector<long long>& sum, int l, int r) {
  5.     return sum[r] - sum[l - 1];
  6. }
  7.  
  8. int main() {
  9.     ios::sync_with_stdio(false);
  10.  
  11.     int n;
  12.     cin >> n;
  13.     vector<long long> a(n + 2), sum(n + 2, 0);
  14.     for (int i = 1; i <= n; ++i) {
  15.         cin >> a[i];
  16.         sum[i] = sum[i - 1] + a[i];
  17.     }
  18.  
  19.     const long long INF = 0x3f3f3f3f3f3f3f3f;
  20.     vector<vector<long long>> lSumMax(4, vector<long long>(n + 2, -INF));
  21.     for (int i = 1; i <= n; ++i) {
  22.         lSumMax[0][i] =
  23.             max(lSumMax[0][i - 1], getSum(sum, 1, i) + getSum(sum, i + 1, n));
  24.         lSumMax[1][i] =
  25.             max(lSumMax[1][i - 1], getSum(sum, 1, i) - getSum(sum, i + 1, n));
  26.         lSumMax[2][i] =
  27.             max(lSumMax[2][i - 1], -getSum(sum, 1, i) + getSum(sum, i + 1, n));
  28.         lSumMax[3][i] =
  29.             max(lSumMax[3][i - 1], -getSum(sum, 1, i) - getSum(sum, i + 1, n));
  30.     }
  31.  
  32.     vector<vector<long long>> rSumMax(4, vector<long long>(n + 2, -INF));
  33.     for (int i = n; i >= 1; --i) {
  34.         rSumMax[0][i] =
  35.             max(rSumMax[0][i + 1], getSum(sum, 1, i) + getSum(sum, i + 1, n));
  36.         rSumMax[1][i] =
  37.             max(rSumMax[1][i + 1], getSum(sum, 1, i) - getSum(sum, i + 1, n));
  38.         rSumMax[2][i] =
  39.             max(rSumMax[2][i + 1], -getSum(sum, 1, i) + getSum(sum, i + 1, n));
  40.         rSumMax[3][i] =
  41.             max(rSumMax[3][i + 1], -getSum(sum, 1, i) - getSum(sum, i + 1, n));
  42.     }
  43.  
  44.     long long ans = 0;
  45.     for (int i = 2; i < n; ++i) {
  46.         ans = max(ans, max({lSumMax[0][i - 1] - getSum(sum, i + 1, n),
  47.                             lSumMax[1][i - 1] + getSum(sum, i + 1, n),
  48.                             lSumMax[2][i - 1] - getSum(sum, i + 1, n),
  49.                             lSumMax[3][i - 1] + getSum(sum, i + 1, n)}) +
  50.                            max({rSumMax[0][i + 1] - getSum(sum, 1, i),
  51.                                 rSumMax[1][i + 1] - getSum(sum, 1, i),
  52.                                 rSumMax[2][i + 1] + getSum(sum, 1, i),
  53.                                 rSumMax[3][i + 1] + getSum(sum, 1, i)}));
  54.     }
  55.     cout << ans << '\n';
  56.  
  57.     return 0;
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment