Cod sursa(job #411657)

Utilizator marinaMarina Horlescu marina Data 5 martie 2010 01:19:47
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#define INF 0x3f3f3f3f

int N, K;

struct nod
{
	int info;
	nod *next;
	nod *prev;
}*head = NULL, *last = NULL;

void insert(nod *&head, int val)
{
	while(head && head->info > val) 
	{
		nod *temp = head;
		head = head -> next;
		delete temp;
	}
	nod *p = new nod;
	p -> info = val;
	p -> next = head; 
	p -> prev = NULL; 
	if(head) head -> prev = p; 
	head = p;
	if(head -> next == NULL) last = head;
}

void afis(nod *list)
{
	if(!list) return;
	for(; list; list = list -> next)
		printf("%d ", list -> info);
	printf("\n");
}

int main()
{
	freopen("deque.in", "r", stdin);
	freopen("deque.out", "w", stdout);
	
	scanf("%d %d", &N, &K);
	
	int *v = new int[N];
	
	int i;
	for(i = 0; i < K; ++i)
	{
		scanf("%d", v+i);
		insert(head, v[i]);
	}
	
	long long sum = last -> info;
	
	for(i = K; i < N; ++i)
	{	
		scanf("%d", v+i);
		if(last -> info == v[i-K])
		{
			last = last -> prev;
			delete last -> next;
			last -> next = NULL;
		}
		insert(head, v[i]);
		sum += last -> info;
	}
	printf("%lld\n", sum);
	return 0;
}