Pagini recente » Cod sursa (job #2940216) | Cod sursa (job #2060858) | Cod sursa (job #2048368) | Cod sursa (job #2499653) | Cod sursa (job #1480950)
#include <fstream>
#include <stack>
#include <iostream>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
struct TwoStackQueue {
stack<pair<int, int>> St[2];
void pushIn(bool x, int val) {
int m = val;
if(!St[x].empty())
m = min(m, St[x].top().second);
St[x].push({val, m});
}
void push_back(int x) {
pushIn(0, x);
}
int getMin() {
if(St[0].empty()) return St[1].top().second;
if(St[1].empty()) return St[0].top().second;
return min(St[0].top().second, St[1].top().second);
}
void pop_front() {
if(St[1].empty()) {
while(!St[0].empty()) {
int x = St[0].top().first;
St[0].pop();
pushIn(1, x);
}
}
St[1].pop();
}
};
TwoStackQueue Q;
int main() {
int n, k, val;
fin>>n>>k;
for(int i=1; i<k; i++) {
fin>>val;
Q.push_back(val);
}
int64_t sum = 0;
for(int i=k; i<=n; i++) {
fin>>val;
Q.push_back(val);
sum += Q.getMin();
//cout<<Q.getMin()<<" ";
Q.pop_front();
}
fout<<sum;
return 0;
}