Pagini recente » Cod sursa (job #970401) | Cod sursa (job #1793871) | Cod sursa (job #845271) | Cod sursa (job #1928076) | Cod sursa (job #1480947)
#include <fstream>
#include <stack>
#include <iostream>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
struct TwoStackQueue {
int St[2][5000005], Min[2][5000005];
int E[2];
TwoStackQueue() {
Min[0][0] = Min[1][0] = 20000000;
}
void pushIn(bool x, int val) {
++E[x];
St[x][E[x]] = val;
Min[x][E[x]] = min(Min[x][E[x]-1], val);
}
void push_back(int x) {
pushIn(0, x);
}
int getMin() {
return min(Min[0][E[0]], Min[1][E[1]]);
}
void pop_front() {
if(!E[1]) {
while(E[0]) {
pushIn(1, St[0][E[0]]);
E[0]--;
}
}
E[1]--;
}
};
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();
Q.pop_front();
}
fout<<sum;
return 0;
}