Pagini recente » Cod sursa (job #407817) | Cod sursa (job #328985) | Cod sursa (job #253693) | Cod sursa (job #2124202) | Cod sursa (job #1212570)
#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;
bool is_empty_deque()
{
return (first > last);
}
int get_last()
{
return DQ[last];
}
int get_first()
{
return DQ[first];
}
void remove_last()
{
--last;
}
void add_last(int e)
{
DQ[++last] = e;
}
void remove_first()
{
++first;
}
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;
}