Cod sursa(job #2277714)

Utilizator cezar.plescaCezar Plesca cezar.plesca Data 6 noiembrie 2018 19:05:47
Problema Deque Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include<stdio.h>
#include<stdlib.h>

#include<vector>
#include<deque>
#include<algorithm>

using namespace std;

#define MAXN 5000000

//int V[MAXN];
int* V;

deque<pair<int,int>> multime;

int N, K;
long long rez;

void findsum(){
	
	rez+=(long long)(multime.front().first);
	
	vector<int>::iterator it;
	for(int i=K; i<N; i++){
		while(!multime.empty()){
			if(multime.back().first>=V[i])
				multime.pop_back();
			else
				break;
		}
		multime.push_back(make_pair(V[i],i));
		
		if(multime.front().second<=(i-K))
			multime.pop_front();
		
		rez+=(long long)(multime.front().first);
	}
}

int main(){
	
	freopen("deque.in","rt",stdin);
	freopen("deque.out","wt",stdout);
	
	scanf("%d %d",&N,&K);
	V=new int[N];

	for(int i=0;i<N;i++){
		scanf("%d",&V[i]);
		if(i<K)
			multime.push_back(make_pair(V[i],i));
	}
	
	sort(multime.begin(),multime.end());
	findsum();

	printf("%lld",rez);

	return 0;
}