Advertisement
pb_jiang

LC364 T3

Sep 26th, 2023
777
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. using ll = long long;
  2. class Solution {
  3. public:
  4.     long long maximumSumOfHeights(vector<int>& mh) {
  5.         ll ret = 0;
  6.         int n = mh.size();
  7.         vector<ll> pref(n), suff(n);
  8.         stack<int> stck;
  9.         for (int i = 0; i < n; ++i) {
  10.             while(stck.size() && mh[i] < mh[stck.top()]) stck.pop();
  11.             if (stck.size() == 0) pref[i] = ll(i + 1) * mh[i];
  12.             else pref[i] = ll(i - stck.top()) * mh[i] + pref[stck.top()];
  13.             stck.push(i);
  14.         }
  15.         while(stck.size()) stck.pop();
  16.         for (int i = n - 1; i >= 0; --i) {
  17.             while(stck.size() && mh[i] < mh[stck.top()]) stck.pop();
  18.             if (stck.size() == 0) suff[i] = ll(n - i) * mh[i];
  19.             else suff[i] = ll(stck.top() - i) * mh[i] + suff[stck.top()];
  20.             stck.push(i);
  21.         }
  22.        
  23.         for (int i = 0; i < n; ++i) {
  24.             ret = max(ret, suff[i] + pref[i] - mh[i]);
  25.         }
  26.         return ret;
  27.     }
  28. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement