Mai intai trebuie sa te autentifici.
Cod sursa(job #2204755)
Utilizator | Data | 16 mai 2018 23:12:36 | |
---|---|---|---|
Problema | Deque | Scor | 25 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.52 kb |
#include <fstream>
#include <cstdio>
#include <deque>
#include <ctype.h>
using namespace std;
deque <int> q;
char const in [] = "deque.in";
char const out [] = "deque.out";
int const NM = 5e6 + 7 , BUFF = 1e7;
char buff [BUFF];
int point;
int getbuff ()
{
int 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;
}
int 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 ("%d\n" , val);
return 0;
}