Cod sursa(job #1181314)

Utilizator tudi98Cozma Tudor tudi98 Data 2 mai 2014 14:39:27
Problema Deque Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <iostream>
#include <deque>
#include <utility>
#define pf push_front
#define pb push_back
#define popf pop_front
#define popb pop_back
#define pii pair<int,int>
#define mp make_pair
#define x first
#define y second
using namespace std;

deque<pii> D;
long long sum;
int a,i,n,k;

int main(){

	ifstream f("deque.in");
	ofstream g("deque.out");

	f>>n>>k;
	for(i=1;i<=k;i++){
		f>>a;
		if(D.empty()){
			D.pf(mp(a,i));
		}
		else{
			if(a<D.front().x){
				D.clear();
				D.pf(mp(a,i));
			}
			else if(a<D.back().x && D.size()!=1){
				D.popb();
				D.pb(mp(a,i));
			}
			else if(D.size()==1 && a<D.back().x) D.pf(mp(a,i));
			else if(D.size()==1 && a>D.back().x) D.pb(mp(a,i));
		}	
	}

	sum+=D.front().x;
	for(i=k+1;i<=n;i++){
		f>>a;
		if(i-D.front().y+1>k){  
			D.popf();         
			if(D.back().x>a) D.clear();
			D.pb(mp(a,i));
		}
		else {
			if(D.front().x>a) D.clear(),D.pf(mp(a,i));
			else if(D.back().x>a && D.size()!=1) D.popb(),D.pb(mp(a,i));
			else if(D.back().x>a && D.size()==1) D.pf(mp(a,i));
			else if(D.back().x<a && D.size()==1) D.pb(mp(a,i));
		}
		sum+=D.front().x;  
	}
	g << sum;
}