Pagini recente » Cod sursa (job #160867) | Cod sursa (job #1471017) | Cod sursa (job #519073) | Cod sursa (job #556897) | Cod sursa (job #3332078)
#include <fstream>
#include <algorithm>
#include <bitset>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <deque>
#include <climits>
#include <cassert>
using namespace std;
std::ifstream cin("deque.in");
std::ofstream cout("deque.out");
int v[5000005];
class MonotonicQueue {
public:
void Push(int x) {
while (!D.empty() && D.back() > x) D.pop_back();
D.push_back(x);
}
int Min() {
return D.front();
}
void Pop(int x) {
if (D.front() == x) D.pop_front();
}
private:
std::deque<int> D;
};
signed main() {
int n,k;
cin>>n>>k;
for (int i=1; i<=n; i++) {
cin>>v[i];
}
MonotonicQueue Q;
for (int i=1; i<=k; i++) {
Q.Push(v[i]);
}
long long sum = Q.Min();
for (int i=k; i<n; i++) {
Q.Push(v[i+1]);
Q.Pop(v[i-k+1]);
sum += Q.Min();
}
cout<<sum;
}