Pagini recente » Cod sursa (job #3233738) | Istoria paginii lot-2017/baraj-2 | Clasamentul arhivei educationale | Cod sursa (job #3292781) | Cod sursa (job #3127462)
#include <fstream>
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
bool empty(int st, int dr)
{
return st > dr;
}
int main()
{
int deq[5000001], poz[5000001];
int n, k, el;
int st = 0, dr = 0;//deq si poz o sa aiba aceeasi marime => un singur set de indici
long long int sum = 0;
f >> n >> k;
for(int i = 1; i <= n; i++)
{
f >> el;
//vrem sa elimine din finalul deque-ului elementele mai mari ca el curent
while(!empty(st, dr) && deq[dr] > el)
dr--;
deq[++dr] = el; //punem elementul in deq
poz[dr] = i; //punem pozitia lui in poz
//pt fiecare segment care incepe de la k pana la final trebuie sa gasim un minim si sa-l adunam la secventa
if(i >= k)
{
//dam pop la minim daca nu mai e in secventa
if(poz[st] == i - k)
st++;
//il luam pe cel care ramane primul in deq
sum += deq[st];
}
}
g << sum;
return 0;
}