Cod sursa(job #2306126)
Utilizator | Data | 21 decembrie 2018 17:23:10 | |
---|---|---|---|
Problema | Deque | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.6 kb |
#include <bits/stdc++.h>
const int MV(5 * 1e6 + 5) ;
int dq[MV] ;
int v[MV] ;
long long s ;
int main() {
freopen("deque.in", "r", stdin) ;
freopen("deque.out", "w", stdout) ;
int n, k ;
register int i ;
int st(0), dr(-1) ;
scanf("%d %d", &n, &k) ;
for (i = 1 ; i <= n ; ++ i) {
scanf("%d", v + i) ;
if (st <= dr && dq[st] == i - k) {
st ++ ;}
while (st <= dr && v[i] <= v[dq[dr]]) {
dr -- ;}
dq[++ dr] = i ;
if (i >= k) {
s += v[dq[st]] ;}}
printf("%lld", s) ;
return 0 ;}