Cod sursa(job #872087)

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

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

int main(){

	ifstream fin("deque.in");
	ofstream fout("deque.out");
	
	fin >> n >> k;
	
	for(int i=1; i<=n; i++){
		fin >> vec[i];
	}
	
	for(int 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;
}