Cod sursa(job #253060)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 5 februarie 2009 13:23:53
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>
#include <deque>
#define FIN "deque.in"
#define FOUT "deque.out"
#define N 5000007
using namespace std;
int n,k;
long long s;
int v[N];
deque <int> d;
void read()
{
	int i;
	deque <int> :: iterator it;
	freopen(FIN,"r",stdin);
	scanf("%d%d", &n, &k);
	scanf("%d", &v[1]);
	d.push_back(1);
	for (i = 2; i <= n; ++i)
	{
		scanf("%d", &v[i]);
		if (v[i] > v[ d.back() ])
		{
			d.push_back(i);
			//printf("am adaugat la sfarsit %d\n",v[i]);
		}
		if (i - d.front() >= k)
		{
			//printf("am scos %d - prea vechi\n",v[d.front()]);
			d.pop_front();
		}
		if (v[i] < v[ d.back() ])
		{
			while ( v[i] < v[ d.back() ] && d.size() )
			{
				//printf("am scos %d - prea mare\n",v[d.back()]);
				d.pop_back();
			}
			d.push_back(i);
			//printf("adaug la sfarsit %d\n",v[i]);
		}
		if(i>=k)
			s += v[ d.front() ]; 
	}
}
void write()
{
	freopen(FOUT,"w",stdout);
	printf("%lld \n", s);
}
int main()
{
	read();
	//solve();
	write();
}