Pagini recente » Cod sursa (job #1357122) | Cod sursa (job #3273851) | Cod sursa (job #2946132) | Cod sursa (job #1670671) | Cod sursa (job #2265689)
#include <fstream>
using namespace std;
const int MAXN = 5000005;
int a[MAXN];
int k;
struct MyDeque
{
int ind[MAXN];
int st = 0, dr = 0;
void add(int pos) {
while (dr-st > 0 && a[pos] <= a[ind[dr-1]])
--dr;
ind[dr++] = pos;
}
int get(int pos) {
while (pos - ind[st] >= k)
st++;
return a[ind[st]];
}
};
MyDeque deck;
int main() {
ifstream fin("deque.in");
ofstream fout("deque.out");
int n, x;
long long rez = 0;
fin >> n >> k;
for (int i = 1; i <= n; i++) {
fin >> x;
a[i] = x;
deck.add(i);
if (i >= k) {
rez += deck.get(i);
}
}
fout << rez;
return 0;
}