Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cstring>
- #include <algorithm>
- #include <cmath>
- #include <vector>
- #include <set>
- #include <map>
- #include <stack>
- #include <queue>
- #include <deque>
- #include <unordered_map>
- #include <iomanip>
- #include <regex>
- #include <numeric>
- using namespace std;
- #define pii pair<long long , long long>
- #define FAST ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
- const long long dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
- const long long MAX = 100005;
- long long n, d;
- long long arr[MAX], dp[MAX];
- deque<long long> dq;
- int main() {
- //freopen("talent.in", "r", stdin);
- //freopen("talent.out", "w", stdout);
- FAST;
- cin >> n >> d;
- for(long long i = 0; i < n; i++){
- cin >> arr[i];
- }
- long long ans = -2e9;
- for(long long i = n - 1; i >= 0; i--){
- dp[i] = arr[i];
- if(!dq.empty()){
- dp[i] = max(dp[i], dp[dq.front()] + arr[i]);
- }
- //cout << i << " " << dp[i] << "\n";
- ans = max(ans, dp[i]);
- if(i >= n - d){
- while(!dq.empty() and dp[i] >= dp[dq.back()]){
- dq.pop_back();
- }
- dq.push_back(i);
- }
- else{
- while(!dq.empty() and dq.front() >= i + d){
- dq.pop_front();
- }
- while(!dq.empty() and dp[i] >= dp[dq.back()]){
- dq.pop_back();
- }
- dq.push_back(i);
- }
- }
- cout << ans << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement