Cod sursa(job #574978)

Utilizator AnteusPatrascoiu Mihai Anteus Data 7 aprilie 2011 19:09:00
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include <stdio.h>
#include <deque>
using namespace std;
FILE *f=fopen ("deque.in", "r");
FILE *g=fopen ("deque.out", "w");
int v[5000001],i,n,k;
long long S;
deque <int> dq;

void eliminare() {
int x=i-k+1;

while ( x>0 && dq[0]<x )
	dq.pop_front();
}

void adaugare(int x) {

while (!dq.empty() && x<v[dq.back()] )
	dq.pop_back();

dq.push_back(i);
}

int main() {
fscanf (f, "%d%d", &n,&k);

for (i=1;i<=n;i++)
{
	fscanf (f, "%d", &v[i]);
	eliminare();
	adaugare(v[i]);
	
	if (i>=k)
		S+=v[dq.front()];
}

fprintf (g, "%lld", S);
return 0;
}