Pagini recente » Cod sursa (job #679920) | Monitorul de evaluare | Cod sursa (job #1230564) | Istoria paginii runda/simulare1 | Cod sursa (job #662040)
Cod sursa(job #662040)
#include<fstream>
#define NMAX 5000005
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
int N, A[NMAX], Deque[NMAX],K;
int Front, Back;
long long sum;
int main()
{
int i;
in >> N >> K;
for(i = 1; i <= N; i++)
in >> A[i];
Front = 1; Back = 0; // Initializare; daca Front > Back, deque-ul este vid
for(i = 1; i <= N; i++)
{
// cat timp elementul curent este mai mic sau egal decat ultimul el. din deque, elimin poz ultimului el din deque
while(Front <= Back && A[i] <= A[ Deque[Back] ]) Back--;
// introduc poz el. curent in deque pe la capat
Deque[++Back] = i;
// daca elementul minim corespunde cu pozitia i-K il eliminam din Deque, nefiind important pt pozitii >=i
if(Deque[Front] == i-K) Front++;
if(i >= K) sum+=A[ Deque[Front] ];
}
out << sum;
}