Pagini recente » Cod sursa (job #993649) | Cod sursa (job #509259) | Cod sursa (job #2153152) | Cod sursa (job #3207814) | Cod sursa (job #1442974)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef long long int int64;
#include <list>
struct NODE
{
int value;
int index;
};
using namespace std;
#define IN_FILE_NAME "deque.in"
#define OUT_FILE_NAME "deque.out"
int main()
{
FILE *pFin, *pFout;
pFin = fopen(IN_FILE_NAME, "r");
pFout = fopen(OUT_FILE_NAME, "w");
int n,k;
fscanf(pFin, "%d %d", &n, &k);
int *arr = new int[n];
int i;
for(i=0; i<n; i++)
{
int nr;
fscanf(pFin, "%d", &nr);
arr[i] = nr;
}
list<NODE> Q = list<NODE>();
for(i=0; i<k; i++)
{
int nr = arr[i];
while(!Q.empty() && Q.back().value > nr)
{
Q.pop_back();
}
NODE node = {nr, i};
Q.push_back(node);
}
int64 sum = 0;
for(i=0; i<=n-k; i++)
{
NODE node = Q.front();
sum += node.value;
if(node.index <= i)
Q.pop_front();
if(i < n-k)
{
int nr = arr[i+k];
while(!Q.empty() && Q.back().value > nr)
{
Q.pop_back();
}
NODE newNode = {nr, i+k};
Q.push_back(newNode);
}
}
Q.clear();
fprintf(pFout, "%lld\n", sum);
fclose(pFin);
fclose(pFout);
return 0;
}