Cod sursa(job #3332078)

Utilizator wiki__Andrei Alecu izsak wiki__ Data 3 ianuarie 2026 22:07:33
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <algorithm>
#include <bitset>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <deque>
#include <climits>
#include <cassert>
using namespace std;

std::ifstream cin("deque.in");
std::ofstream cout("deque.out");

int v[5000005];

class MonotonicQueue {
public:
    void Push(int x) {
        while (!D.empty() && D.back() > x) D.pop_back();
        D.push_back(x);
    }
    int Min() {
        return D.front();
    }
    void Pop(int x) {
        if (D.front() == x) D.pop_front();
    }
private:
    std::deque<int> D;
};

signed main() {
    int n,k;
    cin>>n>>k;

    for (int i=1; i<=n; i++) {
        cin>>v[i];
    }

    MonotonicQueue Q;

    for (int i=1; i<=k; i++) {
        Q.Push(v[i]);
    }

    long long sum = Q.Min();

    for (int i=k; i<n; i++) {
        Q.Push(v[i+1]);
        Q.Pop(v[i-k+1]);
        sum += Q.Min();
    }

    cout<<sum;
}