Pagini recente » Cod sursa (job #1055363) | Cod sursa (job #239483) | Cod sursa (job #1055407) | Cod sursa (job #2962560) | Cod sursa (job #1583395)
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
ifstream F("deque.in");
ofstream G("deque.out");
const int N = 5000010;
/*
template <class T>
class deque {
private:
struct node {
T value;
node *next;
node *last;
};
node *_front;
node *_back;
public:
deque() {
_front = _back = nullptr;
}
void push_front(T value) {
node *newNode = new node();
newNode->next = _front;
newNode->value = value;
if (_front != nullptr) {
_front->last = newNode;
}
_front = newNode;
if (_back == nullptr) {
_back = _front;
}
}
void push_back(T value) {
node *newNode = new node();
newNode->last = _back;
newNode->value = value;
if (_back != nullptr) {
_back->next = newNode;
}
_back = newNode;
if (_front == nullptr) {
_front = _back;
}
}
T front() {
return _front -> value;
}
T back() {
return _back -> value;
}
void pop_front() {
node *now = _front;
_front = _front -> next;
delete now;
}
void pop_back() {
node *now = _back;
_back = _back -> last;
delete now;
}
bool empty() {
return _front == _back && _front == nullptr;
}
};*/
int n,k,a[N];
deque<int> dq;
long long ans;
int main()
{
F>>n>>k;
for (int i=1;i<=n;++i)
F>>a[i];
for (int i=1;i<=k;++i)
{
if ( !dq.empty() )
{
while ( a[i] < a[dq.back()] )
{
dq.pop_back();
if ( dq.empty() ) break;
}
}
dq.push_back( i );
}
ans += a[dq.front()];
for (int i=k+1;i<=n;++i)
{
cerr << dq.front() << '\n';
if ( !dq.empty() )
if ( dq.front() <= i-k )
dq.pop_front();
if ( !dq.empty() )
{
while ( a[i] < a[dq.back()] )
{
dq.pop_back();
if ( dq.empty() ) break;
}
}
dq.push_back( i );
ans += a[dq.front()];
}
G<<ans<<'\n';
}