Pagini recente » Cod sursa (job #1527434) | Cod sursa (job #1470021) | Cod sursa (job #587832) | Cod sursa (job #1129002) | Cod sursa (job #806438)
Cod sursa(job #806438)
#include <fstream>
using namespace std;
using namespace std;
class Node {
private:
int value, index;
public:
Node() {}
Node(int value, int index) { this->value = value; this->index = index; }
Node(const Node &newNode) { this->value = newNode.value; this->index = newNode.index; }
int getValue() { return value; }
int getIndex() { return index; }
} ;
class Deque {
private:
Node *array;
int capacity;
int left, right;
public:
Deque(int);
void push(Node current) { array[++right] = current; }
void pop_back() { right--; }
void pop_front() { left++; }
Node min() { return array[left]; }
int size() { return right - left + 1; }
Node top() { return array[right]; }
} ;
Deque::Deque(int n) {
capacity = n;
array = new Node[capacity + 5];
left = 1;
right = 0;
}
int main()
{
ifstream fin("deque.in");
ofstream fout("deque.out");
int N, K, value;
long long sum;
fin >> N >> K;
Deque deque(N);
for(int i = 1; i <= K; ++i) {
fin >> value;
while(deque.size() > 0 && deque.top().getValue() > value)
deque.pop_back();
deque.push(Node(value, i));
}
sum = deque.min().getValue();
for(int i = K + 1; i <= N; ++i) {
fin >> value;
while(deque.size() > 0 && deque.top().getValue() > value)
deque.pop_back();
deque.push(Node(value, i));
while(deque.min().getIndex() <= i - K)
deque.pop_front();
sum += deque.min().getValue();
}
fout << sum << "\n";
fin.close();
fout.close();
return 0;
}