Pagini recente » lee-pregatire | Cod sursa (job #2286009) | Cod sursa (job #3176799) | Cod sursa (job #1025146) | Cod sursa (job #1552997)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
struct Deque {
int val;
Deque* next;
Deque* before;
Deque(int val) {
this->val = val;
this->next = nullptr;
this->before = nullptr;
}
};
long long getMin(vector<int> input, int numOfElem, int range) {
long long min = 0;
Deque* head = new Deque(0);
Deque* tail = head;
for(int i = 1; i < numOfElem; i++) {
if(head->val <= i - range) {
Deque* newHead = head->next;
delete head;
head = newHead;
head->before = nullptr;
}
while(tail != nullptr && input.at(tail->val) > input.at(i)) {
Deque* newTail = tail->before;
delete tail;
tail = newTail;
}
if(tail == nullptr) {
head = new Deque(i);
tail = head;
} else {
Deque* newTail = new Deque(i);
newTail->before = tail;
tail->next = newTail;
tail = newTail;
}
if(i >= range - 1) {
min += input.at(head->val);
}
}
return min;
}
int main() {
ifstream f("deque.in");
ofstream g("deque.out");
int numOfElem;
int range;
f >> numOfElem;
f >> range;
int elem;
vector<int> input;
while(f >> elem) {
input.push_back(elem);
}
g << getMin(input, numOfElem, range);
f.close();
g.close();
return 0;
}