Cod sursa(job #1316280)

Utilizator mariusn01Marius Nicoli mariusn01 Data 13 ianuarie 2015 18:06:57
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>

using namespace std;

ifstream fin ("deque.in");
ofstream fout("deque.out");
int v[5000010]; // numerele de la intrare
int d[5000010]; // indici din v

long long sol;
int n, k, i, p, u;

int main() {
    fin>>n>>k;
    u = 0;
    p = 1;

    // la un pas in d vor fi elemente candidat pentru secventa de lungime k ce se terminate
    // pe pozitia i dar si cele ce sunt candidat pentru urmatoarele secvente de lg k
    for (i=1;i<=n;i++) {
        fin>>v[i];

        // elementul curent scoate
        while (p<=u && v[i] < v[ d[u] ])
            u--;
        d[++u] = i;

        if (i-d[p] == k)
            p++;

        if (i >= k) {
            sol += v[ d[p] ];
        }

    }

    fout<<sol<<"\n";


    return 0;
}