Pagini recente » Cod sursa (job #2315304) | Cod sursa (job #3241820) | Cod sursa (job #914597) | Cod sursa (job #727343) | Cod sursa (job #1420903)
#include <fstream>
#include <deque>
using namespace std;
int numbers[5000001];
long long minSum(deque<int>& noSequence,
int N,
int K)
{
long long s = 0;
for (int i = 1; i <= N; i++) {
/* while the current value is smaller than the values
from the end of the deque, we no longer need them */
while (!noSequence.empty() &&
numbers[i] <= numbers[noSequence.back()]) {
noSequence.pop_back();
}
noSequence.push_back(i);
// cout << noSequence.back() << '\n';
/* check if the current min value is no longer needed */
if (noSequence.front() == i - K) noSequence.pop_front();
/* compute the minSum */
if (i >= K) {
s += numbers[noSequence.front()];
}
}
return s;
}
int main()
{
ifstream in("deque.in");
ofstream out("deque.out");
int N, K;
in >> N >> K;
for (int i = 1; i <= N; i++)
in >> numbers[i];
deque<int>noSequence;
out << minSum(noSequence, N, K);
in.close();
out.close();
return 0;
}