Cod sursa(job #872076)

Utilizator RobertSSamoilescu Robert RobertS Data 5 februarie 2013 19:07:22
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<iostream>
#include<fstream>
#include<deque>
using namespace std;
#define MAX_N 10000

long n, k, suma;
deque<long> mydeque;
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]
		if(!mydeque.empty()){
			while(vec[mydeque.back()] >  vec[i] && !mydeque.empty()){
				mydeque.pop_back();
			}
		}
		
		// adaug pozitia nelementul vec[i] in coda
		mydeque.push_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){
			mydeque.pop_front();
		}
	
		if(i >= k)
		suma += vec[mydeque.front()];
	}
	
	
	fout << suma;
	
return 0;
}