Cod sursa(job #2731795)

Utilizator vladstefanVlad Oros vladstefan Data 28 martie 2021 12:30:24
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb

// problema deque

#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <stack>
#include <queue>
#include <deque>

#define NMax 5000000

using namespace std;

ifstream fin("deque.in");
ofstream fout("deque.out");

int n, k;
long long sum;
deque<pair<int, int>> s; // s.back() este mereu valoarea cautata

void input() {
    fin >> n >> k;
}

void update_front(int val, int k) {
    while (!s.empty() && s.front().first > val) s.pop_front();
    s.push_front({val, k});
}

void update_back(int k) {
    if (s.back().second == k) s.pop_back();
}

void solve() {
    int i, x;
    for (i = 1; i <= k; ++i) {
        fin >> x;
        update_front(x, i);
    }
    for (i = k + 1; i <= n; ++i) {
        sum += (long long) s.back().first;
        fin >> x;
        update_back(i - k);
        update_front(x, i);
    }
    sum += (long long) s.back().first;
    fout << sum;
}

int main() {
    input();
    solve();
}