Cod sursa(job #1546854)

Utilizator danalex97Dan H Alexandru danalex97 Data 8 decembrie 2015 19:50:23
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
using namespace std;

ifstream F("deque.in");
ofstream G("deque.out");

class deque 
{
	private:
		static const int N = 10000010;
		int begin, end, array[N];
	
	public:
		deque()
		{
			begin = N/2;
			end = N/2;
		}
		
		int front() 
		{
			return array[begin];
		}
		
		int back() 
		{
			return array[end-1];
		}
		
		void push_front(int x) 
		{
			begin--;
			array[begin] = x;
		}
		
		void push_back(int x) 
		{
			array[end] = x;
			end++;
		}
		
		void pop_front() 
		{
			begin++;
		}
		
		void pop_back() 
		{
			end--;
		}
		
		bool empty() 
		{
			return begin == end;
		}
		
		int size() 
		{
			return end - begin;
		}
};

int n,k,a[5000010];
deque dq = deque();

int main()
{
	F>>n>>k;
	for (int i = 1; i <= n; ++i) 
		F>>a[i];
	long long sum = 0;
	for (int i = 1; i <= n; ++i) 
	{
		if ( !dq.empty() ) 
			while ( a[i] <= a[ dq.back() ] ) 
			{
				dq.pop_back();
				if ( dq.empty() )
					break;
			}
		
		dq.push_back( i );
		if ( dq.front() == i - k )
			dq.pop_front();
		
		if ( i >= k )
			sum += a[ dq.front() ];
	}
	G<<sum<<'\n';
}