Pagini recente » Cod sursa (job #2474212) | Cod sursa (job #2199157) | Cod sursa (job #2174320) | Cod sursa (job #2388099) | Cod sursa (job #2617427)
#include <bits/stdc++.h>
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
class Deque{
int *coada;
int front;
int back;
public:
Deque(int n);
void push_front(int val);
void push_back(int val);
void pop_front();
void pop_back();
int get_front();
int get_back();
bool is_empty();
};
bool Deque :: is_empty(){
if( front > back )
return true;
return false;
}
Deque :: Deque(int n){
front = 0;
back = -1;
coada = new int[n];
}
void Deque :: push_front(int val){
if( front > 0 ){
--front;
coada[front] = val;
}
}
void Deque :: push_back(int val){
++back;
coada[back] = val;
}
void Deque :: pop_front(){
++front;
}
void Deque :: pop_back(){
--back;
}
int Deque :: get_front(){
return coada[front];
}
int Deque :: get_back(){
return coada[back];
}
int main(){
int n, k, x;
vector <int> elem;
long long suma = 0;
f >> n >> k;
Deque deque(n);
elem.reserve(n);
int i = 0;
while( i < n ){
f >> x;
elem.push_back(x);
++i;
}
deque.push_back(0);
for(int i = 1; i < n; i++ ){
while( !deque.is_empty() && elem[i] <= elem[deque.get_back()]){
deque.pop_back();
}
deque.push_back(i);
if( i >= k - 1){
suma += elem[deque.get_front()];
}
if(!deque.is_empty() && deque.get_front() == i - k + 1)
deque.pop_front();
}
g << suma;
}