Pagini recente » Cod sursa (job #2738836) | Cod sursa (job #2787759) | Cod sursa (job #1746308) | Cod sursa (job #576130) | Cod sursa (job #2205230)
#include<cstdio>
#include<deque>
#include<utility>
using namespace std;
#define VAL(d) d.first
#define POZ(d) d.second
#define VALOARE(x) x
#define POZITIE(x) x
int n, k, i;
deque< pair<long long, int> > d;
int main() {
FILE *fin = fopen("deque.in", "r");
fscanf(fin, "%d%d", &n, &k);
for(i=0; i<k; i++) {
int x;
fscanf(fin, "%d", &x);
while(!d.empty() && VAL(d.back()) > x) d.pop_back();
d.push_back(make_pair(VALOARE(x), POZITIE(i)));
}
long long suma = VAL(d.front());
for(; i<n; i++) {
// scoate ala care nu mai e in secventa
if(!d.empty() && POZ(d.front()) <= i-k) d.pop_front();
// baga urmatorul
int x;
fscanf(fin, "%d", &x);
while(!d.empty() && VAL(d.back()) > x) d.pop_back();
d.push_back(make_pair(VALOARE(x), POZITIE(i)));
suma += VAL(d.front());
}
fclose(fin);
FILE *fout = fopen("deque.out", "w");
fprintf(fout, "%lld\n", suma);
fclose(fout);
return 0;
}