Pagini recente » Cod sursa (job #1120760) | Cod sursa (job #1007115) | Cod sursa (job #1889530) | Cod sursa (job #3152868) | Cod sursa (job #2277714)
#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;
}