Cod sursa(job #2731693)

Utilizator MihaelaDanilaDanila Mihaela MihaelaDanila Data 28 martie 2021 01:56:14
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#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;
}