Pagini recente » Cod sursa (job #2098398) | Cod sursa (job #500849) | Cod sursa (job #2155002) | Cod sursa (job #3188121) | Cod sursa (job #2260476)
#include<fstream>
#include<deque>
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
int n,k,i,v[5000001];
long long suma;
int main()
{
f>>n>>k;
deque<int>coada;
for(i=1;i<=n;i++)
{
f>>v[i];
//atata timp cat coada mea nu este goala si urmatorul element citit este mai mic decat ultimul element din coada in partea dreapta
while(!coada.empty()&&v[i]<v[coada.back()])
//scadem pozitiile
coada.pop_back();
//introduc in partea drepat pozitia i
coada.push_back(i);
//daca pozitia din dreapta a cozii este egala cu diferenta de indicele i pe care ne aflam si numarul k de elemente intr- o secventa
if(coada.front()==i-k)
//atunci scadem din indicii din partea dreapta
coada.pop_front();
//daca indicele pe care ma aflu, i, este mai mare sau egal decat nr de elemente dintr-o secventa
if(i>=k)
//adaug la suma deja existenta elementul care se afla pe pozitia cea mai din stanga
suma=suma+v[coada.front()];
}
g<<suma;
return 0;
}