Cod sursa(job #383233)

Utilizator alutzuAlexandru Stoica alutzu Data 16 ianuarie 2010 09:24:30
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<cstdio>

const int NMAX = 5000005 ;
int k ;

int dq [ NMAX ] , st = 0 , dr = 0 ;
int x [ NMAX ] ;
long long S = 0 ;
inline void stanga ( int i )
{
	if ( i - dq[st] == k )
		++st;
}

void dreapta ( int i )
{
	while ( st <= dr &&  x [ i ] <= x [ dq[dr] ] )
		--dr ;
	dq [ ++dr ] = i ;
}

int main ( )
{
	
	freopen ( "deque.in" , "r" , stdin ) ;
	freopen ( "deque.out" , "w" , stdout ) ;

	int n , i ;
	
	scanf ( "%d%d" , & n , &k ) ;
	
	for ( i = 1 ; i <= n ; ++ i )
		scanf ( "%d" , & x[i] ) ;
	
	st=dr=1;
	dq[1]=1;
	for ( i = 2 ; i <= n ; ++ i )
	{
		stanga ( i ) ;
		dreapta ( i ) ;
		if ( i >= k )
			S+= (long long)x[dq[st]] ;
	}
	
	printf ( "%lld\n" , S ) ;
	
	return 0 ;
	
}