Pagini recente » Cod sursa (job #3246605) | Cod sursa (job #267841) | Cod sursa (job #2038014) | Cod sursa (job #1824438) | Cod sursa (job #1701075)
#include <cstdio>
const int MAX_N = 5000000;
int v[MAX_N];
struct Deque {
int front, top, size;
int d[MAX_N];
Deque() {
front = top = size = 0;
}
void push_top(int val) {
d[top%MAX_N] = val;
top++;
size++;
}
void pop_top() {
top--;
size--;
}
void push_front(int val) {
front--;
d[(front + MAX_N)%MAX_N] = val;
size++;
}
void pop_front() {
front++;
}
int getSize() {
return size;
}
int getTop() {
return d[(top - 1) % MAX_N];
}
int getFront() {
return d[(front + MAX_N) % MAX_N];
}
};
int main() {
int n, k, i;
long long s;
Deque* myDeque = new Deque;
FILE *fin = fopen("deque.in", "r");
fscanf(fin, "%d%d", &n, &k);
for(i = 0; i < n; i++)
fscanf(fin, "%d", &v[i]);
fclose(fin);
s = 0LL;
for(i = 0; i < n; i++) {
while(myDeque->getSize() > 0 && myDeque->getTop() > v[i])
myDeque->pop_top();
myDeque->push_top(v[i]);
if(i >= k && myDeque->getFront() == v[i - k])
myDeque->pop_front();
if(i >= k - 1)
s = s + myDeque->getFront();
}
FILE *fout = fopen("deque.out", "w");
fprintf(fout, "%lld", s);
fclose(fout);
return 0;
}