Cod sursa(job #2607673)

Utilizator RNedelcuNedelcu Radu RNedelcu Data 29 aprilie 2020 23:39:43
Problema Deque Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
class deq {
    int *A;
    int i, j;
  public:
    deq(int nr_elem = 0): A(nr_elem ? new int[nr_elem] : nullptr), i(0), j(0) {};
    ~deq() {
    }
    void pop_back() {
        j--;
    }
    void pop_front() {
        i++;
    }
    int front() {
        return A[i];
    }
    int back() {
        return A[j - 1];

    }
    void push_back(int val) {
        A[j++] = val;
    }
    int size() {
        return j - i;
    }
    void afis() {
        for(int k = i; k < j; k++)
            cout << A[k] << " ";
        cout << endl;
    }
    int get_min() {
        int min = 0xFFFFFFF;
        for(int k = i; k < j; k++)
            if(A[k] < min)
                min = A[k];
        return min;
    }
};
int main() {
    int N, K, x,i=0;
    long long int S = 0;
    int min = 0xFFFFFFF;
    in >> N >> K;
    deq A(N);
    for(i = 0; i < K; i++) {
        in >> x;
        if(x < min)
            min = x;
        A.push_back(x);
    }
    S += min;
    for(i; i < N; i++) {
        in >> x;
        if(min == A.front()) {
            A.pop_front();
            A.push_back(x);
            min = A.get_min();
            S += min;
        } else {
            A.pop_front();
            A.push_back(x);
            if(x < min)
                min = x;
            S += min;
        }

    }
    out << S;


    return 0;
}