Pagini recente » Cod sursa (job #3039743) | Cod sursa (job #2015148) | Cod sursa (job #779733) | Statistici sandu iuliana claudia (sanduclaudia95) | Cod sursa (job #2204756)
#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 + 1 == BUFF)
{
point = 0;
fread (buff , 1 , BUFF , stdin);
}
++ point;
}
while(isdigit (buff [point]))
{
nr = nr * 10 + (buff [point] - '0');
if(point + 1 == BUFF)
{
point = 0;
fread (buff , 1 , BUFF , stdin);
}
++ point;
}
if(semn)
nr = 0 - nr;
return nr;
}
ll v [NM] , val;
int main()
{
freopen (in , "r" , stdin);
freopen (out , "w" , stdout);
fread (buff , 1 , BUFF , stdin);
int n ;
n = getbuff ();
int k = getbuff ();
for(int i = 1 ; i <= n ; ++ i)
v [i] = getbuff ();
q . push_front (1);
for(int i = 2 ; i <= n ; ++ i)
{
while(! q . empty () && v [q . back ()] >= v [i])
q . pop_back ();
while(! q . empty () && q . front () <= i - k)
q . pop_front ();
q . push_back (i);
int a = q . back ();
int b = q . front ();
if(i >= k)
val += v [q . front ()];
}
printf ("%lld\n" , val);
return 0;
}