Pagini recente » Cod sursa (job #297364) | Istoria paginii utilizator/alexandrusonia | Cod sursa (job #1708087) | Istoria paginii runda/alexei2/clasament | Cod sursa (job #904564)
Cod sursa(job #904564)
#include <fstream>
#include <deque>
using namespace std;
struct DEQUE {
long int v, p;
};
deque <DEQUE> D;
DEQUE init (long int x, long int i)
{
DEQUE a;
a.v = x, a.p = i;
return a;
}
long int v[5000005], n, k, s;
int main ()
{
ifstream fin ("deque.in");
fin >> n >> k;
for (int i = 0; i < n; ++i)
fin >> v[i];
fin.close();
D.push_front (init (v[0], 0));
for (int i = 1; i < k; ++i)
if (v[i] <= D.front().v)
D.push_front(init (v[i], i));
else
{
while (v[i] < D.back().v && D.size())
D.pop_back();
D.push_back (init (v[i], i));
}
s = D.front().v;
for (int i = k; i < n; ++i)
{
while (v[i] < D.back().v && D.size())
D.pop_back();
D.push_back (init (v[i], i));
while (D.front().p + k <= i)
D.pop_front();
s += D.front().v;
}
ofstream fout ("deque.out");
fout << s;
fout.close();
return 0;
}