Pagini recente » Cod sursa (job #2361842) | Cod sursa (job #1979006) | Cod sursa (job #2527867) | Cod sursa (job #1615071) | Cod sursa (job #2406288)
#include <bits/stdc++.h>
#define int_pair std::pair <int, int>
class TwoStackDeque {
public:
TwoStackDeque() {}
int min() {return std::min((s1.empty() ? INT_MAX : s1.top().second), (s2.empty() ? INT_MAX : s2.top().second));}
void insert(int val) {s1.push({val, (s1.empty() ? val : std::min(val, s1.top().second))});}
int pop() {
if (s2.empty()) while (!s1.empty())
s2.push({s1.top().first, (s2.empty() ? s1.top().first : std::min(s2.top().second, s1.top().first))}), s1.pop();
int removed = s2.top().first; s2.pop();
return removed;
}
protected:
std::stack <int_pair> s1, s2;
};
int N, K;
TwoStackDeque deque;
std::ifstream input ("deque.in");
std::ofstream output("deque.out");
void readInput() {
input >> N >> K;
}
void solveInput() {
long long sum = 0;
for (int i=1, X; i<K; ++i)
input >> X, deque.insert(X);
for (int i=K, X; i<=N; ++i)
input >> X, deque.insert(X), sum += 1LL * deque.min(), deque.pop();
output << sum << '\n';
}
int main()
{
readInput();
solveInput();
return 0;
}