Pagini recente » Cod sursa (job #1384559) | Cod sursa (job #3224646) | Cod sursa (job #1605932) | Cod sursa (job #1869835) | Cod sursa (job #2227393)
///just experimenting :D
#include <stdio.h>
#include <deque>
#define BUFFER_SIZE 125000
int p = 0; char buffer[BUFFER_SIZE];
__attribute__((always_inline)) int read()
{
int number = 0; char sign = '+';
while(buffer[p] < '0')
{
sign = buffer[p];
if(++p == BUFFER_SIZE)
{
fread(buffer, 1, BUFFER_SIZE, stdin);
p = 0;
}
}
while(buffer[p] > '/')
{
number = number * 10 + buffer[p] - 48;
if(++p == BUFFER_SIZE)
{
fread(buffer, 1, BUFFER_SIZE, stdin);
p = 0;
}
}
if(sign == '-') number = -number;
return number;
}
FILE *fin = fopen("deque.in", "r");
FILE *fout = fopen("deque.out", "w");
#define MAXN 5000001
std::deque <int> q;
int N, K;
int v[MAXN];long long sum;
int main() {
N = read(), K = read();
for(int i = 1;i <= N;i++) {
v[i] = read();
}
for(int i = 1;i <= N;i++) {
while(!q.empty() && v[i] <= v[q.back()])
q.pop_back();
q.push_back(i);
if(q.front() == i - K)
q.pop_front();
if(i >= K)
sum += 1LL * v[q.front()];
}
fprintf(fout, "%lld", sum);
fclose(fin);
fclose(fout);
return 0;
}