Pagini recente » Cod sursa (job #2107496) | Cod sursa (job #1206823) | Cod sursa (job #2926924) | Cod sursa (job #2675344) | Cod sursa (job #2553855)
#include <fstream>
#include <deque>
#include <queue>
#include <cstdint>
#include <utility>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
struct A
{
A(int _first, int _second) : first(_first), second(_second)
{
}
int first, second;
bool operator> (const A& other) const
{
if (first > other.first) { return true; }
if (first < other.first) { return false; }
return second > other.second;
}
};
int n, k;
deque<int> Dq;
priority_queue<A, vector<A>, greater<A>> Q;
int main()
{
fin >> n >> k;
for (int i = 1, x; i <= k; ++i)
{
fin >> x;
Dq.push_back(x);
Q.emplace(x, i);
}
int64_t r = Q.top().first;
for (int i = k + 1, x; i <= n; ++i)
{
fin >> x;
Dq.pop_front();
Dq.push_back(x);
while (!Q.empty() && (Q.top().second < (i - k + 1)))
{
Q.pop();
}
Q.emplace(x, i);
r += Q.top().first;
}
fout << r;
fin.close();
fout.close();
return 0;
}