Pagini recente » Cod sursa (job #113802) | Cod sursa (job #2223251) | Cod sursa (job #620010) | Cod sursa (job #3172159) | Cod sursa (job #1268853)
#include<stdio.h>
using namespace std;
const int NMAX = 5000000;
struct str
{
int val, poz;
}v[NMAX+1];
int st, dr;
str d[NMAX+1];
int main()
{
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
int n, k;
long long sol=0ll;
scanf("%d%d", &n, &k);
for(int i=1; i<=n; ++i)
{
scanf("%d", &v[i].val);
v[i].poz=i;
}
dr=0;
st=1;
for(int i=1; i<k; ++i)
{
while(st<=dr && d[dr].val>=v[i].val)
--dr;
d[++dr]=v[i];
}
for(int i=k; i<=n; ++i)
{
if(d[st].poz<=i-k)
++st;
while(st<=dr && d[dr].val>=v[i].val)
--dr;
d[++dr]=v[i];
sol+=(long long)d[st].val;
}
printf("%lld\n", sol);
return 0;
}