Pagini recente » Cod sursa (job #602795) | Monitorul de evaluare | Cod sursa (job #343582) | Cod sursa (job #2053744) | Cod sursa (job #1879327)
#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;
}