Pagini recente » Borderou de evaluare (job #559871) | infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #1753022) | Cod sursa (job #456922) | Cod sursa (job #2813523)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ifstream f("deque.in");
ofstream g("deque.out");
deque<int> dq;
int n, k, curr_min = INT_MAX;
ll sum_final;
void recalculateMin(int x){
int len = dq.size();
curr_min = INT_MAX;
for (int i = 0; i < len; i++)
curr_min = min(dq[i], curr_min);
}
int main(){
f >> n >> k;
for (int i = 1, x; i <= n; i++){
f >> x;
if (dq.size() < k){
dq.push_back(x);
curr_min = min(x, curr_min);
}
else{
sum_final += curr_min;
int ex_first = dq.front();
dq.push_back(x);
dq.pop_front();
if (ex_first != curr_min){
//O(1)
curr_min = min(x, curr_min);
}
else{
//O(k)
recalculateMin(x);
}
}
}
sum_final += curr_min;
g << sum_final;
return 0;
}