Pagini recente » Borderou de evaluare (job #2434658) | Borderou de evaluare (job #2265109) | Borderou de evaluare (job #2138179) | Borderou de evaluare (job #751931) | Cod sursa (job #1753394)
#include <iostream>
#include <fstream>
#define NMAX 5000005
using namespace std;
struct Element{
int value, position;
};
Element deque[NMAX];
int main()
{
#define USE_FILES
#ifdef USE_FILES
ifstream fin("deque.in");
ofstream fout("deque.out");
#define cin fin
#define cout fout
#endif // USE_FILES
int n, k;
int start = 0, finish = -1;
long long sum = 0;
cin >> n >> k;
for (int i = 0; i < k; ++i){
int x;
cin >> x;
while (start <= finish && deque[finish].value >= x){
--finish;
}
deque[++finish].value = x;
deque[finish].position = i;
}
sum += deque[0].value;
for (int i = k; i < n; ++i){
int x;
cin >> x;
if (deque[start].position <= i - k) ++start;
while (start <= finish && deque[finish].value >= x){
--finish;
}
deque[++finish].value = x;
deque[finish].position = i;
sum += deque[start].value;
}
cout << sum << '\n';
return 0;
}