Pagini recente » Cod sursa (job #976523) | Cod sursa (job #1871711) | Cod sursa (job #759178) | Cod sursa (job #2377575) | Cod sursa (job #2462750)
#include <cstdint>
#include <deque>
#include <fstream>
using namespace std;
class Window
{
public:
Window(int size) : size_(size) {}
void Add(int value, int time);
int Min() const { return deq_.front().first; }
private:
deque<pair<int, int>> deq_;
int size_;
};
void Window::Add(int value, int time)
{
while (!deq_.empty() && deq_.back().first >= value) {
deq_.pop_back();
}
deq_.push_back({value, time});
while (time - deq_.front().second >= size_) {
deq_.pop_front();
}
}
int main()
{
ifstream fin("deque.in");
ofstream fout("deque.out");
int n, size;
fin >> n >> size;
Window window(size);
int64_t sum = 0;
for (int i = 0; i < n; i += 1) {
int num;
fin >> num;
window.Add(num, i);
if (i + 1 >= size) {
sum += window.Min();
}
}
fout << sum << "\n";
return 0;
}