Pagini recente » Cod sursa (job #1094554) | Cod sursa (job #2836145) | Cod sursa (job #2866856) | Cod sursa (job #1640595) | Cod sursa (job #1181314)
#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;
}