Pagini recente » Cod sursa (job #2715337) | Cod sursa (job #2761033) | Cod sursa (job #1077641) | Cod sursa (job #98269) | Cod sursa (job #662065)
Cod sursa(job #662065)
#include<fstream>
#include<deque>
#define NMAX 5000005
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
int N, A[NMAX],K;
int Front, Back;
long long sum;
deque<int> D;
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(!D.empty() and A[i] <= A[ D.back() ]) D.pop_back();
// introduc poz el. curent in deque pe la capat
D.push_back(i);
// daca elementul minim corespunde cu pozitia i-K il eliminam din Deque, nefiind important pt pozitii >=i
if(D.front() == i-K) D.pop_front();
if(i >= K) sum+=A[ D.front() ];
}
out << sum;
}