Pagini recente » Cod sursa (job #1757707) | Cod sursa (job #1630077) | Cod sursa (job #35656) | Cod sursa (job #2646539) | Cod sursa (job #2731693)
#include <iostream>
#include <fstream>
using namespace std;
#define SIZE 5000010
ifstream f("deque.in");
ofstream g("deque.out");
int n,k;
int a[SIZE];
long long suma;
class Deque{
private:
int first;
int last;
int *coada;
public:
Deque(){
first = 1;
last = 0;
coada = new int[SIZE];
}
bool isEmpty();
int getLastElement();
int getFirstElement();
void extrageLastElement();
void extrageFirstElement();
void introLastElement(int x);
}d;
bool Deque::isEmpty(){
return (first > last);
}
int Deque::getLastElement(){
if(!isEmpty()){
return coada[last];
}else{
cout<<"Deque gol!";
return -1;
}
}
int Deque::getFirstElement(){
if(!isEmpty()){
return coada[first];
}else{
cout<<"Deque gol!";
return -1;
}
}
void Deque::extrageLastElement(){
if(!isEmpty()){
last--;
}else{
cout<<"Deque gol!";
}
}
void Deque::extrageFirstElement(){
if(!isEmpty()){
first++;
}else{
cout<<"Deque gol!";
}
}
void Deque::introLastElement(int x){
coada[++last] = x;
}
int main(){
f>>n>>k;
int i;
for(i=1; i<= n; i++){
f>>a[i];
}
for(i=1; i<= n; i++){
while(!d.isEmpty() && a[i] <= a[d.getLastElement()]){
d.extrageLastElement();
}
d.introLastElement(i);
if(d.getFirstElement() == i-k){
d.extrageFirstElement();
}
if(i>=k) suma+=a[d.getFirstElement()];
}
g<<suma;
return 0;
}