Pagini recente » Cod sursa (job #266257) | Cod sursa (job #2345592) | Cod sursa (job #2251075) | Cod sursa (job #389172) | Cod sursa (job #3140194)
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
// ifstream cin("")
int v[5000001];
deque <int> dq;
// ind = dq.front() ind= dq.back()
//dq.pop_front() dq.push_front()
int main()
{
ifstream cin("deque.in");
ofstream cout("deque.out");
int n, k;
cin >> n >> k;
for(int i = 1; i <= k; i++)
{
cin >> v[i];
while(!dq.empty() && v[dq.back()] >= v[i])
dq.pop_back();
dq.push_back(i);
}
// sunt la v[i]
// v[i-k+1]........v[i]
// indicele minimului este primul element din deque
long long s = v[ dq.front() ];
// 5 000 000 * 4 octeti = 20 milioane = 20 MB
for(int i = k + 1; i <= n; i++)
{
cin >> v[i];
while(!dq.empty() && v[dq.back()] >= v[i])
dq.pop_back();
dq.push_back(i);
if(dq.front() == i - k)dq.pop_front();
s += v[dq.front()];
}
cout << s;
return 0;
}