Cod sursa(job #1088286)

Utilizator Stefanescu_MihaiStefanescu Mihai-Nicolae Stefanescu_Mihai Data 20 ianuarie 2014 14:01:52
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>

using namespace std;


int qu[5000100];
int poz[5000100];


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

    int n, k, i;
    int dummy;
    long long s = 0;

    scanf( "%d %d\n", &n, &k );

    int head = 1, rear = 0;

    for ( i = 1; i < k; ++i )
    {
        scanf( "%d\n", &dummy );

        while ( ( head <= rear ) && ( qu[rear] > dummy ) )
            --rear;

        qu[++rear] = dummy;
        poz[rear] = i;
    }

    for ( i = k; i <= n; ++i )
    {
        scanf( "%d\n", &dummy );

        while ( ( head <= rear ) && ( qu[rear] > dummy ) )
            --rear;

        qu[++rear] = dummy;
        poz[rear] = i;

        while ( poz[head] <= i - k )
            ++head;

        s += qu[head];
    }


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


    fclose( stdin );
    fclose( stdout );

    return 0;
}