Pagini recente » Arhiva de probleme | Cod sursa (job #627042) | Cod sursa (job #2161750) | Cod sursa (job #188880) | Cod sursa (job #1497206)
#include <stdio.h>
#include <ctype.h>
using namespace std;
#define BUFF_SIZE 4096
int vec[50000001],counter;
char c, sign, buff[BUFF_SIZE];
int pos = BUFF_SIZE;
inline char getChar(FILE *f) {
if (pos == BUFF_SIZE) {
fread(buff, 1, BUFF_SIZE, f);
pos = 0;
}
return buff[pos++];
}
inline void freef(FILE *f, const char *type, int *result) {
*result = 0;
c = '#';
do {
sign = c;
c = getChar(f);
} while (!isdigit(c));
do {
*result = (*result << 3) + (*result << 1) + c - '0';
c = getChar(f);
} while (isdigit(c));
if (sign == '-') {
*result = -(*result);
}
}
int minim(int a,int b)
{
int mini = 10000001;
for(int i=a; i<=b; i++)
{
if (vec[i]<mini) {mini=vec[i]; counter=i;}
}
return mini;
}
int main()
{
FILE *in = fopen("deque.in", "r");
FILE *out = fopen("deque.out", "w");
int n,aux,k,mini;
freef(in, "%d", &n);
freef(in, "%d", &k);
for(int i=1;i<=n;i++) freef(in, "%d", &vec[i]);
mini=minim(1,k);
long long int sum=mini;
for (int i=k+1;i<=n;i++)
{
counter--;
if (counter==0)
{
mini=minim(i-k+1,i);
counter=counter-i+k;
}
else if(mini>vec[i])
{
mini=vec[i];
counter=k;
}
sum+=mini;
}
fprintf(out, "%lld\n", sum);
fclose(in);
fclose(out);
return 0;
}