-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMaximum_Subarray_Sum_II.cpp
More file actions
31 lines (30 loc) · 1.27 KB
/
Maximum_Subarray_Sum_II.cpp
File metadata and controls
31 lines (30 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const char nl = '\n';
// Author oGhostyyy
/* Thinking: given array with n integers, find max sum of values in contigous subarray with length between
a and b , Kadane algo maybe?
nvm apparently need prefix sums and a deque*/
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll n; cin >> n; //size of array
ll a; cin >> a;
ll b; cin >> b;
vector<ll> arr(n); for(auto& it :arr) cin >> it;
//lets do the prefix sum uhh 1 bigger and filled with 0s then sum up?
vector<ll> prefix(n+1,0);
for(int i = 0; i < n; i++){
prefix[i+1] = prefix[i] + arr[i];
}//prefix created
ll maxSum = LLONG_MIN; //this has negative values too, so smallest possible
multiset<ll> ms; //so, we're trying to maximize the prefix sum query in each window ie pfx[j] should be minimized
for(int i = a; i <= n; i++){
if(i > b) ms.erase(ms.find(prefix[i - b - 1])); //erase element if not supposed to be in window
ms.insert(prefix[i - a]);
maxSum = max(maxSum , prefix[i] - *ms.begin()); //so this should minimize the thingy oh wait a set puts them in order i forgot that, thats so cool
}
cout << maxSum << nl;
//what the fuck , so i is our ending posistion
}