Pagini recente » Cod sursa (job #3212580) | Cod sursa (job #1959734) | Cod sursa (job #639681) | Cod sursa (job #3003998) | Cod sursa (job #2265499)
#include <fstream>
#include <deque>
#include <vector>
#define MAX 5000005
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
int n, k, x;
int *a;
struct my_deque
{
int *ind, st = 0, dr = 0;
void init(const int k)
{
ind = new int[k];
}
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 ind[st];
}
};
void cu_struct()
{
int s = 0;
my_deque d;
d.init(k);
a = new int[n];
for (int i = 1; i < k; i ++)
{
f >> x;
a[i] = x;
d.add(i);
}
for (int i = k; i <= n; i++)
{
f >> x;
a[i] = x;
d.add(i);
s += a[d.get(i)];
}
g << s;
}
int main()
{
f >> n >> k;
cu_struct();
return 0;
}