Cod sursa(job #872085)

Utilizator RobertSSamoilescu Robert RobertS Data 5 februarie 2013 19:16:26
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<iostream>
#include<fstream>
#include<deque>
using namespace std;
#define MAX_N 5100000

long n, k; 
long long suma, front , back;
long long mydeque[MAX_N];
long long vec[MAX_N];

int main(){

	ifstream fin("deque.in");
	ofstream fout("deque.out");
	
	fin >> n >> k;
	
	for(long i=1; i<=n; i++){
		fin >> vec[i];
	}
	
	for(long i=1; i<=n; i++){
		
		
		// scot elementele din coada pana cand gasesc un element mai mic decat vec[i]
		while(vec[mydeque[back]] >  vec[i] && front <= back){
			back--;
		}
		
		// adaug pozitia nelementul vec[i] in coda
		back++;
		mydeque[back] = i;
		
		
		// daca primul element din coada nu mai face parte din secventa de k elemente, atunci il scot din coada
		if(mydeque[front] == i-k){
			front++;
		}
	
		if(i >= k)
		suma += vec[mydeque[front]];
	}
	
	
	fout << suma;
	
return 0;
}