Pagini recente » Cod sursa (job #1127148) | Cod sursa (job #16371) | Cod sursa (job #1873272) | Cod sursa (job #1109616) | Cod sursa (job #2204763)
#include <fstream>
#include <cstdio>
#include <deque>
#include <ctype.h>
using namespace std;
deque <int> q;
typedef long long ll;
char const in [] = "deque.in";
char const out [] = "deque.out";
int const NM = 5e6 + 7 , BUFF = 1e7;
char buff [BUFF];
int point;
ll getbuff ()
{
ll nr = 0;
bool semn = 0;
while(! isdigit (buff [point]))
{
if(buff [point] == '-')
semn = 1;
if(point == BUFF)
{
point = 0;
fread (buff , 1 , BUFF , stdin);
}
++ point;
}
while(isdigit (buff [point]))
{
nr = nr * 10 + (buff [point] - '0');
if(point == BUFF)
{
point = 0;
fread (buff , 1 , BUFF , stdin);
}
++ point;
}
if(semn)
nr = 0 - nr;
return nr * 1LL;
}
ll v [NM] , val;
int main()
{
freopen (in , "r" , stdin);
freopen (out , "w" , stdout);
fread (buff , 1 , BUFF , stdin);
ll n ;
n = getbuff ();
ll k = getbuff ();
for(int i = 1 ; i <= n ; ++ i)
v [i] = getbuff ();
//q . push_front (1);
for(int i = 1 ; i <= n ; ++ i)
{
while(! q . empty () && v [q . back ()] >= v [i])
q . pop_back ();
if (! q . empty () && q . front () <= i - k)
q . pop_front ();
q . push_back (i);
if(i >= k)
val = 1LL * (val + v [q . front ()]);
}
printf ("%lld" , val);
return 0;
}