Cod sursa(job #2265689)

Utilizator tnocNume corect tnoc Data 21 octombrie 2018 15:57:42
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>

using namespace std;

const int MAXN = 5000005;

int a[MAXN];
int k;

struct MyDeque
{
    int ind[MAXN];
    int st = 0, dr = 0;
    void add(int pos) {
        while (dr-st > 0 && a[pos] <= a[ind[dr-1]])
            --dr;
        ind[dr++] = pos;
    }
    int get(int pos) {
        while (pos - ind[st] >= k)
            st++;
        return a[ind[st]];
    }
};

MyDeque deck;

int main() {

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

    int n, x;
    long long rez = 0;

    fin >> n >> k;
    for (int i = 1; i <= n; i++) {
        fin >> x;
        a[i] = x;
        deck.add(i);
        if (i >= k) {
            rez += deck.get(i);
        }
    }
    fout << rez;


    return 0;
}