Advertisement
pb_jiang

CF846C WA

Jun 1st, 2023
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.15 KB | None | 0 0
  1. // Problem: C. Four Segments
  2. // Contest: Codeforces - Educational Codeforces Round 28
  3. // URL: https://codeforces.com/contest/846/problem/C
  4. // Memory Limit: 256 MB
  5. // Time Limit: 1000 ms
  6. //
  7. // Powered by CP Editor (https://cpeditor.org)
  8.  
  9. #include <assert.h>
  10. #include <bits/stdc++.h>
  11. using namespace std;
  12. #ifdef __DEBUG__
  13. #include "dbg.h"
  14. #else
  15. #define dbg(...) 42
  16. #endif
  17. template <class T> using mpq = priority_queue<T, vector<T>, greater<T>>;
  18.  
  19. using ll = long long;
  20. using pii = pair<int, int>;
  21. using pll = pair<ll, ll>;
  22. using vl = vector<ll>;
  23. using vi = vector<int>;
  24.  
  25. int main(int argc, char **argv)
  26. {
  27.     int n;
  28.     cin >> n;
  29.     vi arr(n);
  30.     for (auto &x : arr)
  31.         cin >> x;
  32.     vl acc(n + 1);
  33.     for (int i = 0; i < n; ++i)
  34.         acc[i + 1] = acc[i] + arr[i];
  35.     int a = 0, b = 0, c = 0;
  36.  
  37.     using a2l = array<ll, 2>;
  38.     vector<a2l> prev(n + 1);
  39.  
  40.     for (int i = 1; i <= n; ++i) {
  41.         if (acc[i] > prev[i - 1][0])
  42.             prev[i] = a2l{acc[i], i};
  43.         else
  44.             prev[i] = prev[i - 1];
  45.         dbg(prev[i][0], prev[i][1]);
  46.     }
  47.     ll maxv = 0;
  48.     ll val = 0;
  49.     using a3l = array<ll, 3>;
  50.     vector<a3l> post(n + 1);
  51.     post[n] = {0, n, n};
  52.     for (int i = n, j = n; i > 0; --i) {
  53.         val += arr[i - 1];
  54.         if (val < 0)
  55.             j = i, val = 0;
  56.         if (val > maxv) {
  57.             maxv = val;
  58.             post[i - 1] = {val, i - 1, j};
  59.         } else {
  60.             post[i - 1] = post[i];
  61.         }
  62.     }
  63.     maxv = -1e18;
  64.     for (int i = 1; i <= n; ++i) {
  65.         val = prev[i - 1][0] + post[i][0];
  66.         dbg(prev[i - 1][0], post[i][0]);
  67.         if (val > maxv)
  68.             a = prev[i - 1][1], b = post[i][1], c = post[i][2], maxv = val;
  69.     }
  70.  
  71.     cout << a << ' ' << b << ' ' << c << endl;
  72.     return 0;
  73. };
  74.  
  75. int main1(int argc, char **argv)
  76. {
  77.     int n;
  78.     cin >> n;
  79.     vi arr(n);
  80.     for (auto &x : arr)
  81.         cin >> x;
  82.     vl acc(n + 1);
  83.     for (int i = 0; i < n; ++i)
  84.         acc[i + 1] = acc[i] + arr[i];
  85.     int a = 0, b = 0, c = 0;
  86.  
  87.     using a2l = array<ll, 2>;
  88.     vector<a2l> prev(n + 1);
  89.  
  90.     for (int i = 1; i <= n; ++i) {
  91.         if (acc[i] > prev[i - 1][0])
  92.             prev[i] = a2l{acc[i], i};
  93.         else
  94.             prev[i] = prev[i - 1];
  95.         dbg(prev[i][0], prev[i][1]);
  96.     }
  97.     ll maxv = -1e18;
  98.     ll val = 0;
  99.     dbg(val, prev[n][1], n);
  100.     ll suf = acc[n], k = n;
  101.     for (int i = n; i >= 0; --i) {
  102.         if (acc[i] > suf)
  103.             suf = acc[i], k = i;
  104.         ll t = prev[i][0] - acc[i] + suf;
  105.         if (t > maxv)
  106.             maxv = t, a = prev[i][1], b = i, c = k;
  107.     }
  108.  
  109.     /*
  110.     for (int i = prev[n][1], j = n, k = n; j > 0;) {
  111.         while (j > i && val > 0) {
  112.             val = val + arr[j - 1];
  113.             if (val + prev[i][0] > maxv) {
  114.                 maxv = val + prev[i][0];
  115.                 a = i, b = j, c = k;
  116.             }
  117.             dbg(i, j, k, val);
  118.             j--;
  119.         }
  120.         if (val < 0) {
  121.             k = j;
  122.             val = 0;
  123.         }
  124.         --j;
  125.         i = prev[i - 1][1];
  126.     }
  127.     */
  128.     cout << a << ' ' << b << ' ' << c << endl;
  129.     return 0;
  130. };
  131.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement