Pagini recente » Cod sursa (job #801377) | Cod sursa (job #703704) | Cod sursa (job #3264403)
#include <iostream>
#include <deque>
#include <fstream>
using namespace std;
ifstream fi("deque.in");
ofstream fo("deque.out");
deque<pair<int,int>>dq;
int N,K,x;
int v[5000005];
void afisare(){
for(auto x:dq){
cout<<x.first<<' ';
}
cout<<endl;
}
int main()
{
fi>>N>>K;
long long sum=0;
for(int i=1;i<=N;i++){
fi>>v[i];
}
for(int i=1;i<=N;i++){
while(!dq.empty()&&dq.front().second<i-K+1){ ///stergi ce nu mai e in subsecventa
dq.pop_front();
}
while(!dq.empty()&&dq.back().first>v[i]){ ///cat timp ai la spatele cozii un element mai mare decat cel curent
dq.pop_back();
}
dq.push_back(make_pair(v[i],i));///pui in coada o valoare de element si un index
if(i>=K){
sum=sum+dq.front().first; ///adaugi valoarea celui mai mic element din subsecventa
}
}
fo<<sum;
}