Pagini recente » Cod sursa (job #1236070) | Cod sursa (job #1954341) | Monitorul de evaluare | Cod sursa (job #2204258) | Cod sursa (job #2657237)
#include <fstream>
#include <deque>
#include <iostream>
using namespace std;
int n, k, v[5000000];
int main() {
deque<int> D;
long long suma = 0;
ifstream f("deque.in");
ofstream g("deque.out");
f>>n>>k;
for (int i = 0; i < n; ++i) {
f>>v[i];
}
D.push_back(0);
for (int i = 1; i < k; ++i) {
if(!D.empty() && v[D.back()] <= v[i]) D.push_back(i);
else if(D.empty()) D.push_back(i);
else{
while(!D.empty() && v[D.back()] > v[i]) D.pop_back();
D.push_back(i);
}
}
suma += (long long)v[D.front()];
for (int i = k; i < n; ++i) {
while(!D.empty() && D.front() < i - k + 1) D.pop_front();
if(!D.empty() && v[D.back()] <= v[i]) D.push_back(i);
else if(D.empty()) D.push_back(i);
else{
while(!D.empty() && v[D.back()] > v[i]) D.pop_back();
D.push_back(i);
}
// cout<<v[D.front()]<<endl;
if(!D.empty()) suma += (long long)v[D.front()];
}
g<<suma;
return 0;
}