Cod sursa(job #561636)
| Utilizator | Data | 20 martie 2011 22:09:33 | |
|---|---|---|---|
| Problema | Deque | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.61 kb |
#include<stdio.h>
#include<fstream>
#include<limits.h>
using namespace std;
#define minf INT_MIN
int deq[5000002];
int v[5000002];
int main()
{
long long s=0;
int n,k,i,lf,rt;
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
scanf("%d%d",&n,&k);
rt=0;
lf=1;
v[0]=minf;
for(i=1;i<=n;++i)
{
scanf("%d",&v[i]);
while(lf<=rt&&v[deq[rt]]>v[i])
--rt;
deq[++rt]=i;
if(deq[lf]<=i-k)
++lf;
if(i>=k)
s+=v[deq[lf]];
}
printf("%lld\n",s);
return 0;
}
