Pagini recente » Cod sursa (job #1204688) | Cod sursa (job #1718586) | Borderou de evaluare (job #2365209) | Cod sursa (job #1610422) | Cod sursa (job #3358885)
#include<iostream>
#include<fstream>
#include<vector>
#include<unordered_map>
#include<algorithm>
#include<queue>
#include<stack>
#include<deque>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
/*struct Node {
int data;
Node* left;
Node* right;
Node(int val) : data(val), left(nullptr), right(nullptr) {}
};
class InorderIterator {
stack<Node*> st;
void move_left(Node* node) {
while (node != nullptr) {
st.push(node);
node = node->left;
}
}
public:
InorderIterator(Node* root) {
move_left(root);
}
bool hasNext() {
return !(st.empty());
}
Node* next() {
if (st.empty()) {
throw "NO NEXT";
}
Node* current_node = st.top();
st.pop();
if (current_node->right != nullptr) {
move_left(current_node->right);
}
return current_node;
}
};*/
int n;
int number;
deque<pair<int, int>> dq;
///1 2 3 4 5 6 7 8
int main() {
ios_base::sync_with_stdio(false);
fin.tie(NULL);
int k;
long long answer_sum;
fin >> n >> k;
answer_sum = 0;
for (int i = 1; i <= n; i++) {
fin >> number;
//elimin elementele mai mari de la finalul deque ului
while (!dq.empty() && dq.back().first >= number) {
dq.pop_back();
}
dq.push_back({ number, i });
if (!dq.empty() && dq.front().second <= i - k) {
dq.pop_front();
}
if (i >= k) {
//cout << "***" << dq.front().first << "\n";
answer_sum += dq.front().first;
}
}
fout << answer_sum << "\n";
fin.close();
fout.close();
return 0;
}