Pagini recente » Cod sursa (job #72773) | Cod sursa (job #2819391) | Cod sursa (job #1822299) | Cod sursa (job #840360) | Cod sursa (job #1442982)
#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)
{
delete Q.back();
Q.pop_back();
}
NODE *node = new NODE;
node->value = nr;
node->index = 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();
delete node;
}
if(i < n-k)
{
int nr = arr[i+k];
while(!Q.empty() && Q.back()->value > nr)
{
delete Q.back();
Q.pop_back();
}
NODE *newNode = new NODE;
newNode->value = nr;
newNode->index = i+k;
Q.push_back(newNode);
}
}
Q.clear();
fprintf(pFout, "%lld\n", sum);
fclose(pFin);
fclose(pFout);
return 0;
}