Cod sursa(job #1305617)

Utilizator BonCipBonciocat Ciprian Mircea BonCip Data 29 decembrie 2014 23:03:40
Problema Deque Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.65 kb
#include <stdio.h>
#define N_MAX 5000000

int v[N_MAX], pos[N_MAX], l, r;

int main()
{
	FILE *fin, *fout;
	fin = fopen("deque.in", "r");
	fout = fopen("deque.out", "w");

	int N, K;
	fscanf(fin, "%d%d", &N, &K);

	int i, read;
	long long ans = 0;
	for (i = 0; i < N; i++) {
		int num;
		fscanf(fin, "%d", &num);
		
		if (r > l && pos[l % N_MAX] == i - K) { // Scoaterea elementelor expirate
			l++;
		}
		while (r > l && num <= v[(r - 1) % N_MAX]) { // Inserarea noului element
			r--;
		}
		v[r % N_MAX] = num;
		pos[r % N_MAX] = i;
		r++;
		ans += (i >= K - 1 ? v[l % N_MAX] : 0);
	}

	fprintf(fout, "%lld\n", ans);

	fclose(fin);
	fclose(fout);
	return 0;
}