Pagini recente » Cod sursa (job #3005236) | Cod sursa (job #1212573)
#include <fstream>
#define SIZE 5000001
using namespace std;
ifstream ifs("deque.in");
ofstream ofs("deque.out");
int A[SIZE];
int DQ[SIZE], first = 1, last = 0;
#define is_empty_deque() (first > last)
#define get_last() (DQ[last])
#define get_first() (DQ[first])
#define remove_first() (++first)
#define remove_last() (--last)
#define add_last(e) (DQ[++last] = e)
int main()
{
int n, k;
long long sum = 0;
ifs >> n >> k;
for (int i = 1; i < k; ++i)
{
ifs >> A[i];
while (!is_empty_deque() && A[i] < A[get_last()])
{
remove_last();
}
add_last(i);
}
for (int i = k; i <= n; ++i)
{
if (get_first() < (i-k+1))
{
remove_first();
}
ifs >> A[i];
while (!is_empty_deque() && A[i] < A[get_last()])
{
remove_last();
}
add_last(i);
sum += A[get_first()];
}
ofs << sum << "\n";
return 0;
}