Pagini recente » Cod sursa (job #3182445) | Rating Adam Corina (corina1802) | Cod sursa (job #3261795) | Cod sursa (job #2553608) | Cod sursa (job #1105011)
#include <iostream>
#include <fstream>
#include <deque>
#include <vector>
using namespace std;
class SumOfMinimums {
public:
SumOfMinimums(vector<int>& V, int K) {
sum = 0;
for (int i=0; i<K-1; ++i) {
push(V[i], i);
}
for (int i=K-1; i<V.size(); ++i) {
pop(i-K+1);
push(V[i], i);
sum += Q.front().second;
}
}
long long get() { return sum; }
private:
deque< pair<int, int> > Q;
long long sum;
void push(int val, int pos) {
while (!Q.empty() && val <= Q.back().second) {
Q.pop_back();
}
Q.push_back(make_pair(pos, val));
}
void pop(int thresh) {
while (!Q.empty() && Q.front().first < thresh) {
Q.pop_front();
}
}
};
int main() {
ifstream in("deque.in");
ofstream out("deque.out");
int N, K;
vector<int> values;
in >> N >> K;
while (N--) {
int x;
in >> x;
values.push_back(x);
}
SumOfMinimums som(values, K);
out << som.get() << "\n";
return 0;
}