Cod sursa(job #1879327)

Utilizator gabib97Gabriel Boroghina gabib97 Data 14 februarie 2017 20:52:49
Problema Deque Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <stdio.h>
#include <stdlib.h>
#include <deque>
using namespace std;
int n,i,k,a[5000005];
long long res;
char *b;
deque<int> q;
void read()
{
    int i,l,nr,y;
    fseek(stdin,0,SEEK_END);
    l=ftell(stdin);
    rewind(stdin);
    b=(char*) malloc(l*sizeof(char));
    fread(b,sizeof(char),l,stdin);

    sscanf(b,"%i%i%n",&n,&k,&nr);
    for (i=1;i<=n;i++)
    {
        sscanf(b+nr,"%i%n",&a[i],&y);
        nr+=y;
    }
    free(b);
}
void solve()
{
    int i;
    for (i=1;i<=k;i++)
    {
        while (!q.empty() && a[q.back()]>=a[i])
            q.pop_back();
        q.push_back(i);
    }
    for (i=k+1;i<=n;i++)
    {
        res+=(long long)a[q.front()];
        while (!q.empty() && a[q.back()]>=a[i])
            q.pop_back();
        if (!q.empty() && q.front()<=i-k)
            q.pop_front();
        q.push_back(i);
    }
    res+=(long long)a[q.front()];
}
int main()
{
    freopen ("deque.in","r",stdin);
    freopen ("deque.out","w",stdout);
    read();
    solve();
    printf("%lld",res);
    fclose(stdin);
    fclose(stdout);
    return 0;
}