forked from daiwb/Algorithm
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBillboards.cpp
More file actions
35 lines (30 loc) · 780 Bytes
/
Billboards.cpp
File metadata and controls
35 lines (30 loc) · 780 Bytes
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
32
33
34
35
// http://contest.usaco.org/OPEN11.htm
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
#define REP(i,n) for(int i=0;i<(n);++i)
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define RFOR(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long LL;
#define MAXN 100005
LL ps[MAXN] = {0};
int N, K;
int main() {
scanf("%d %d", &N, &K);
REP(i,N) {
scanf("%lld", &ps[i + 1]);
ps[i + 1] += ps[i];
}
priority_queue<pair<LL, int> > que;
que.push(make_pair(0, 0));
que.push(make_pair(-ps[1], 1));
LL mx = ps[1];
FOR(i,1,N) {
while (que.top().second < i - K) que.pop();
mx = ps[i] + que.top().first;
que.push(make_pair(mx - ps[i + 1], i + 1));
}
printf("%lld\n", mx);
return 0;
}