Cod sursa(job #1968789)

Utilizator andraSaceliAndra Saceli andraSaceli Data 17 aprilie 2017 21:02:50
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <deque>
#include <vector>

using namespace std ;

ifstream cin ("deque.in") ;
ofstream cout ("deque.out") ;

#define tip int

deque <tip> D ;

/*D.push_back (x) => insereaza elementul x in spate
D.push_front (x) => insereaza elementul x in fata
D.pop_back() => scoate elementul x din spate
D.pop_front() => scoate elementul x din fata
D.size() => nr de elemente
D.empty() => daca e vida sau nu
D.front() => accesezi elementul din fata
D.back() => accesezi elementul din spate
Toate operatiile de mai sus se executa in O(1)*/

int main(int argc, char const *argv[])
{
	int n , k ; 
	cin >> n >> k ; 
	vector <int> v (n + 1) ;
	long long S = 0 ;
	for (int i = 1 ; i <= n ; ++ i) {
		cin >> v [i] ;
		while (!D.empty() and v[i] <= v [D.back()]) {
			D.pop_back () ;
		}
		if (D.size() and D.front() == i - k) {
			D.pop_front() ;
		}
		D.push_back(i) ;
		if (i >= k) {
			S += v [D.front()] ;
			// cout << v [D.front()] << "\n" ;
		}
	}
	cout << S << '\n' ;
	return 0;
}