Pagini recente » Cod sursa (job #2735726) | Cod sursa (job #3279596) | Cod sursa (job #1357391) | Cod sursa (job #349242) | Cod sursa (job #1328228)
#include<fstream>
#include<deque>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
#define Nmax 5000001
deque <int> q; //Folosim coada sa retinem numerele in ordine crescatoare, unde deque va salva pozitiile acestora
int N, K, A[Nmax]; //A va retine toate elementele
long long sum=0;
void citire()
{
in>>N>>K;
for(int i=1;i<=N;i++)
in>>A[i];
}
int main ()
{
citire();
for(int i=1; i<=N; i++)
{
while( !q.empty() && A[i] <= A[ q.back()] ) //Cream coada, salvand pozitia i a.i. A[i] > A[ ultima pozitie din coada ]
q.pop_back();
q.push_back(i); // Stergand toate numerele mai mari din coada, tto ce ne ramane e sa adaugam pozitia i
if( q.front() == i-K) //Daca prima pozitie == i-K, inseamna ca prima pozitie din coada a fost calculata pentru toate subsecventele
q.pop_front(); //din care ea face parte in sir
if( i>=K )
sum+= A[q.front()];
}
out<<sum<<'\n';
return 0;
}