Pagini recente » Cod sursa (job #444538) | Cod sursa (job #1552060) | Cod sursa (job #2721195) | Cod sursa (job #2157421) | Cod sursa (job #563452)
Cod sursa(job #563452)
#include <fstream>
#define NMAX 5000005
using namespace std;
int N,K,x,front=1,back;
long long suma;
long long V[NMAX];
ifstream in("deque.in");
ofstream out("deque.out");
int deck[NMAX];
int main()
{
in>>N>>K;
for(int i=1;i<=N;i++)
{
in>>V[i];
// Cat timp elementul curent este mai mic decat ultimul element
// din deque, eliminam pozitia ultimului element din deque
while(front<=back && V[i]<=V[deck[back]])
back--;
deck[++back]=i;
// Daca elementul minim coincide cu cel de pe pozita i-K, ii eliminam pozitia
// din deque, deoarece acesta nu mai conteaza pentru pasii >= i
if(deck[front]==i-K)
++front;
if(i>=K)
suma+=V[deck[front]];
}
out<<suma;
return 0;
}