Cod sursa(job #662065)

Utilizator informatician28Andrei Dinu informatician28 Data 15 ianuarie 2012 19:29:58
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream> 
#include<deque>
#define NMAX 5000005
using namespace std; 
ifstream in("deque.in"); 
ofstream out("deque.out"); 

int N, A[NMAX],K; 
int Front, Back; 
long long sum; 
deque<int> D;

int main() 
{
	int i;
	in >> N >> K; 
	for(i = 1; i <= N; i++) 
		in >> A[i]; 
	Front = 1; Back = 0; // Initializare; daca Front > Back, deque-ul este vid
	
	for(i = 1; i <= N; i++) 
		{
			// cat timp elementul curent este mai mic sau egal decat ultimul el. din deque, elimin poz ultimului el din deque
			while(!D.empty() and A[i] <= A[ D.back() ]) D.pop_back(); 
			
			// introduc poz el. curent in deque pe la capat
			
			D.push_back(i);
			
			// daca elementul minim corespunde cu pozitia i-K il eliminam din Deque, nefiind important pt pozitii >=i
            if(D.front() == i-K) D.pop_front();
 
            if(i >= K) sum+=A[ D.front() ]; 
	}
   
    out << sum;
}