Cod sursa(job #530281)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 7 februarie 2011 13:54:01
Problema Deque Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#define N 5000001
int a[N];
int deck[N];
int st,dr;
int n,k;
using namespace std;
long long sum;
int main() {
    freopen("deque.in","r",stdin);
    freopen("deque.out","w",stdout);
    scanf("%d %d",&n,&k);
    st = 1;
    dr = 1;
    for(int i = 0; i < n; i++) {
        scanf("%d",&a[i]);
    }
    deck[st] = a[0];
    for(int i = 1; i < n; i++) {
        if (i >= k) {
            if (a[i-k] == deck[st]) st++;
            while (a[i] <= deck[dr] && dr >= st) {
                dr--;
            }
            deck[++dr] = a[i];
            sum += deck[st];
        }
        else {
            while (a[i] <= deck[dr] && dr >= st) {
                dr--;
            }
            deck[++dr] = a[i];
            if (i == k - 1) sum += deck[st];
        }
    }

    printf("%lld\n",sum);
    return 0;
}