leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
2104.cpp (950B)
0 class Solution {
1 public:
2 long long subArrayRanges(const vector<int> &nums) {
3 const int n = nums.size();
4 long long res = 0;
5 stack<int> st;
7 for (int right = 0, mid, left; right <= n; right++) {
8 while (!st.empty() && (right == n || nums[st.top()] >= nums[right])) {
9 mid = st.top(), st.pop();
10 left = st.empty() ? -1 : st.top();
11 res -= (long long)nums[mid] * (right - mid) * (mid - left);
12 }
13 st.push(right);
14 }
16 st.pop();
17 for (int right = 0, mid, left; right <= n; right++) {
18 while (!st.empty() && (right == n || nums[st.top()] <= nums[right])) {
19 mid = st.top(), st.pop();
20 left = st.empty() ? -1 : st.top();
21 res += (long long)nums[mid] * (right - mid) * (mid - left);
22 }
23 st.push(right);
24 }
26 return res;
27 }
28 };