Skip to content

Commit 37d1eb8

Browse files
authored
Create main.cpp
1 parent 0067539 commit 37d1eb8

File tree

1 file changed

+48
-0
lines changed
  • 16 - Queue Data Structure Problems/01 - Linear Queue Problems/12 - Sum of Minimum and Maximum Elements of All Subarrays of Size K

1 file changed

+48
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include <iostream>
2+
#include <deque>
3+
using namespace std;
4+
5+
int solve(int *arr, int n, int k){
6+
deque<int> maxi(k);
7+
deque<int> mini(k);
8+
9+
// Addition of first k size window
10+
for(int i = 0; i < k; i++){
11+
while(!maxi.empty() && arr[maxi.back()] <= arr[i]) maxi.pop_back();
12+
while(!mini.empty() && arr[mini.back()] >= arr[i]) mini.pop_back();
13+
14+
maxi.push_back(i);
15+
mini.push_back(i);
16+
}
17+
18+
int ans = 0;
19+
ans += arr[maxi.front()] + arr[mini.front()];
20+
21+
// Process remaining windows
22+
for(int i = k; i < n; i++){
23+
24+
// next window
25+
// removal
26+
while(!maxi.empty() && i - maxi.front() >= k) maxi.pop_front();
27+
while(!mini.empty() && i - mini.front() >= k) mini.pop_front();
28+
29+
// Addition
30+
while(!maxi.empty() && arr[maxi.back()] <= arr[i]) maxi.pop_back();
31+
while(!mini.empty() && arr[mini.back()] >= arr[i]) mini.pop_back();
32+
33+
maxi.push_back(i);
34+
mini.push_back(i);
35+
36+
ans += arr[maxi.front()] + arr[mini.front()];
37+
}
38+
39+
return ans;
40+
}
41+
42+
int main() {
43+
int arr[7] = {2, 5, -1, 7, -3, -1, -2};
44+
int k = 4;
45+
46+
cout << "Result : " << solve(arr, 7, k) << endl;
47+
return 0;
48+
}

0 commit comments

Comments
 (0)