Cod sursa(job #1451743)

Utilizator Vali_DeaconuVali Deaconu Vali_Deaconu Data 18 iunie 2015 12:55:54
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#define N   5000005
using namespace std;
ifstream fin ("deque.in");
ofstream fout ("deque.out");
long long v[N], D[N];
// D[] = indici ai elementelor din V, dintre pozitia curenta i
// si cu maxim k pozitii din urma si atat acesti indici, cat si valorile din V
// de la pozitiile lor sunt in ordine crescatoare
long long n, k, i, p, u, sum;
int main() {
    fin >> n >> k;
    for (i=1; i<=n; ++i)
        fin >> v[i];
    p = 1, u = 0;
    for (i=1; i<=n; ++i) {
        while (p<=u && v[i]<=v[D[u]])
            u--;
        D[++u] = i;
        if (i - D[p] == k)
            p++;
        if (i >= k)
            sum += v[D[p]];
    }
    fout << sum << "\n";
    return 0;
}