Cod sursa(job #662040)

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

int N, A[NMAX], Deque[NMAX],K; 
int Front, Back; 
long long sum; 

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(Front <= Back && A[i] <= A[ Deque[Back] ]) Back--; 
			
			// introduc poz el. curent in deque pe la capat
			
			Deque[++Back] = i;
			
			// daca elementul minim corespunde cu pozitia i-K il eliminam din Deque, nefiind important pt pozitii >=i
            if(Deque[Front] == i-K) Front++;
 
            if(i >= K) sum+=A[ Deque[Front] ]; 
	}
   
    out << sum;
}