Pagini recente » Cod sursa (job #130643) | Cod sursa (job #511812) | Cod sursa (job #937466) | Cod sursa (job #2790971) | Cod sursa (job #2730191)
#include <bits/stdc++.h>
#define n 5000001
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
int sir[n], v[n];
int main()
{
int N, K, p, u, i;
long long s = 0;
p = 0;
u = -1; //initializam deque gol
f>>N>>K;
for(i = 0 ; i < N; i++)
f>>sir[i];
for(i = 0 ; i < N; i++)
{
while (sir[i] <= sir[v[u]] && p <= u)
u--; //cat timp elementul de pe pozitia i e mai mic decat elementele din rear-ul cozii duble
v[++u] = i;
if(v[p] == i-K)
p++; //in cazul in care minimul gasit este egal cu cel de pe pozitia i-K ii eliminam pozitia din deque,
//deoarece acesta nu mai are relevanta pentru pasii > i
if(i + 1 >= K)
s += sir[v[p]];
}
g<<s;
return 0;
}