Pagini recente » Cod sursa (job #990884) | Cod sursa (job #448058) | Cod sursa (job #1840465) | Cod sursa (job #1426745) | Cod sursa (job #872080)
Cod sursa(job #872080)
#include<iostream>
#include<fstream>
#include<deque>
using namespace std;
#define MAX_N 5100000
long n, k;
long long suma;
deque<int> mydeque;
long vec[MAX_N];
int main(){
ifstream fin("deque.in");
ofstream fout("deque.out");
fin >> n >> k;
for(long i=1; i<=n; i++){
fin >> vec[i];
}
for(long i=1; i<=n; i++){
// scot elementele din coada pana cand gasesc un element mai mic decat vec[i]
if(!mydeque.empty()){
while(vec[mydeque.back()] > vec[i] && !mydeque.empty()){
mydeque.pop_back();
}
}
// adaug pozitia nelementul vec[i] in coda
mydeque.push_back(i);
// daca primul element din coada nu mai face parte din secventa de k elemente, atunci il scot din coada
if(mydeque.front() == i-k){
mydeque.pop_front();
}
if(i >= k)
suma += vec[mydeque.front()];
}
fout << suma;
return 0;
}