Cod sursa(job #2180712)

Utilizator 24601Dan Ban 24601 Data 21 martie 2018 02:53:02
Problema Deque Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>
#include <stdlib.h>

#define SIZE 5000000

struct dqe {
    int x;
    int i;
};

static struct dqe dq[SIZE];

static int read(int end)
{
    int ch, x = 0, sgn = 1;

    if ((ch = getchar_unlocked()) == '-') {
        sgn = -1;
    } else {
        x = ch - '0';
    }

    while ((ch = getchar_unlocked()) != end) {
        x = x * 10 + (ch - '0');
    }

    return sgn * x;
}

int main(void)
{
    int n, k, x, i, t, h;
    long long r;

    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);

    n = read(' ');
    k = read('\n');

    t = h = 0;
    r = 0;

    for (i = 0; i < n; i++) {
        x = read('\n');

        while (t - 1 >= h && dq[t-1].x >= x) {
            t--;
        }

        dq[t].x = x;
        dq[t].i = i;
        t++;

        if (i - k >= dq[h].i) {
            h++;
        }

        if (i >= k - 1) {
            r += dq[h].x;
        }
    }

    printf("%lld\n", r);

    return 0;
}