Pagini recente » Borderou de evaluare (job #545078) | Cod sursa (job #2787876) | Cod sursa (job #1625703) | Cod sursa (job #1265204) | Cod sursa (job #1478302)
#include <stdio.h>
#define nmax 5000010
#define buffersize 32768
using namespace std;
int n,k,i,j,t[nmax],pr,ul,udeque[nmax],l=0;
long long sol=0;
char buffer[buffersize+5];
bool ok=true;
void read(int &x)
{
int b;
if (ok) {
ok=false; fread(buffer,1,buffersize,stdin); l=0;
}
while ((buffer[l]<'0' || buffer[l]>'9') && buffer[l]!='-') {
l++;
if (l==buffersize) {
l=0; fread(buffer,1,buffersize,stdin);
}
}
if (buffer[l]=='-') b=-1,l++; else b=1; x=0;
if (l==buffersize) {
l=0; fread(buffer,1,buffersize,stdin);
}
while (buffer[l]>='0' && buffer[l]<='9') {
x=x*10+buffer[l]-48; l++;
if (l==buffersize) {
l=0; fread(buffer,1,buffersize,stdin);
}
}
x=x*b;
}
int main() {
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
read(n); read(k);
for (i=1;i<=n;i++) read(t[i]);
pr=1; ul=0;
for (i=1;i<=n;i++) {
while (pr<=ul && t[udeque[ul]]>=t[i]) ul--;
ul++; udeque[ul]=i;
if (i-udeque[pr]==k) pr++;
if (i>=k) sol=sol+t[udeque[pr]];
}
printf("%lld",sol);
return 0;
}