Pagini recente » Cod sursa (job #1722672) | Istoria paginii runda/cerculdeinfo-lectia17-teoriajocurilo/clasament | Istoria paginii runda/max_min/clasament | Cod sursa (job #1779626) | Cod sursa (job #2733848)
/*
-7 => -7
9 => 2
2 => -1
4 => -1
-1 => -1
5 => 5
6 => 1
7
1*/
#include <iostream>
#include <deque>
#include <fstream>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
int v[5000000];
deque < int > dq;
int main()
{
int k, n;
long long sum(0);
in >> n >> k;
for (int i = 0; i < n; i++)
{
in >> v[i];
if (!dq.empty() && dq.front() == i - k) /// atata timp cat coada nu este goala si primul element din coada este
dq.pop_front(); /// atunci sterge primul element
while (!dq.empty() && v[i] <= v[dq.back()])
{
dq.pop_back();/// taie elemente pana ajunge la minim
}
dq.push_back(i);
if (i >= k - 1)
sum += v[dq.front()];
}
/**int st = 0; int dr = -1;
for (int i = 0; i < n; i++)
{
cin >> v[i];
if (st <= dr && v[dq[st]] == i - k);
st++;
while (st <= dr && v[i] <= v[dq[dr]])
dr--;
dq[++dr] = i;
if (i >= k - 1)
sum += v[dq[st]];
}*/
out << sum;
return 0;
}