Pagini recente » Cod sursa (job #790280) | Cod sursa (job #2635466) | Cod sursa (job #2830491) | Cod sursa (job #2265801) | Cod sursa (job #2575091)
#include <fstream>
using namespace std;
const int NMAX = 5000000;
const int KMAX = 5000000;
int v[NMAX + 1];
int dq[KMAX + 1];
int first, last;
static inline int pop_front(){
first = (first + 1) % KMAX;
return dq[first];
}
static inline int pop_back(){
last = (last - 1 + KMAX) % KMAX;
return dq[last];
}
static inline void push_front(int val){
first = (first - 1 + KMAX) % KMAX;
dq[first] = val;
}
static inline void push_back(int val){
last = (last + 1) % KMAX;
dq[last] = val;
}
static inline int empty(){
return (first == last);
}
ifstream fin( "deque.in" );
ofstream fout( "deque.out" );
int main() {
int n, k, i, s;
fin >> n >> k;
s = 0;
for( i = 1; i <= n; ++i ){
fin >> v[i];
while( !empty() && v[i] <= v[dq[last]] )
pop_back();
push_back(i);
if( i - k == dq[(first + 1) % KMAX])
pop_front();
if( i >= k )
s += v[dq[(first + 1) % KMAX]];
}
fout << s;
return 0;
}