Cod sursa(job #1442974)

Utilizator RanKBrinduse Alexandru RanK Data 26 mai 2015 17:02:13
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb

#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;
}