Cod sursa(job #944337)

Utilizator smaraldaSmaranda Dinu smaralda Data 28 aprilie 2013 10:18:43
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<cstdio>
#include<deque>
#define NMAX 5000000
using namespace std;
long long res;
struct TYPE { int nr,ind; };
deque <TYPE> q;
TYPE make (int a, int b)
{
    TYPE res;
    res.nr=a;
    res.ind=b;
    return res;
}
int main()
{
    freopen("deque.in","r",stdin);
    freopen("deque.out","w",stdout);
    int n,k,i,val;
    TYPE aux;
    scanf("%d%d",&n,&k);
    for(i=1;i<=k;i++)
        {
            scanf("%d",&val);
            aux=make(val,i);
            while(!q.empty() && q.back().nr>=val)
                q.pop_back();
            q.push_back(aux);
        }
    res=(long long)q.front().nr;
    for(i=k+1;i<=n;i++)
        {
            scanf("%d",&val);
            aux=make(val,i);
            while(!q.empty() && q.back().nr>=val)
                q.pop_back();
            q.push_back(aux);
            while(!q.empty() && q.front().ind<=i-k)
                q.pop_front();
            res+=(long long)q.front().nr;
        }
    printf("%lld\n",res);
    return 0;
}