9 {
10 int n = (int)nums.size();
11 int left = 0;
12 long long count = 0;
13 deque<int> max_deque, min_deque;
14
15 for (int right = 0; right < n; ++right)
16 {
17
18 while (!max_deque.empty() && nums[max_deque.back()] < nums[right])
19 max_deque.pop_back();
20 max_deque.push_back(right);
21
22
23 while (!min_deque.empty() && nums[min_deque.back()] > nums[right])
24 min_deque.pop_back();
25 min_deque.push_back(right);
26
27
28 while (nums[max_deque.front()] - nums[min_deque.front()] > 2)
29 {
30 ++left;
31 if (!max_deque.empty() && max_deque.front() < left)
32 max_deque.pop_front();
33 if (!min_deque.empty() && min_deque.front() < left)
34 min_deque.pop_front();
35 }
36
37
38 count += (right - left + 1);
39 }
40 return count;
41 }