Pagini recente » Istoria paginii runda/simulare_oji_10_4/clasament | Cod sursa (job #906647) | Cod sursa (job #1994959) | Cod sursa (job #1780557) | Cod sursa (job #1780245)
#include <iostream>
#include <fstream>
#include <deque>
#define NMAX 5000001
#define BUFF_DIM 100000
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
deque<int> d;
long long int a[NMAX];
char BUFF[BUFF_DIM];
int pos = 0;
void Read(long long int &a)
{
int minn = 0;
while (!isdigit(BUFF[pos]))
{
if (BUFF[pos] == '-')
minn = 1;
if (++pos == BUFF_DIM)
in.read(BUFF, BUFF_DIM), pos = 0;
}
a = 0;
while (isdigit(BUFF[pos]))
{
a = a * 10 + (BUFF[pos] - '0');
if (++pos == BUFF_DIM)
in.read(BUFF, BUFF_DIM),pos = 0;
}
if(minn)
a = -a;
}
int main()
{
long long int n, k;
Read(n),Read(k);
for (int i = 1; i <= n; i++)
Read(a[i]);
in.close();
long long int s = 0;
for (int i = 1; i <= n; i++)
{
while (d.size() > 0 && a[i] <= a[d.back()])
d.pop_back();
d.push_back(i);
if (!d.empty() && d.front() == (i - k))
d.pop_front();
if (i >= k)
s += a[d.front()];
}
out << s << "\n";
out.close();
return 0;
}