Pagini recente » Cod sursa (job #1382131) | Cod sursa (job #137574) | Cod sursa (job #1740870) | Cod sursa (job #1025612) | Cod sursa (job #2245250)
#include <cstdio>
#include <cstdlib>
using namespace std;
struct deq_el
{
int poz, el;
deq_el *next, *prev;
};
struct deq
{
deq_el *cap, *coada;
};
void insert_deq(deq &d, int val, int poz, int min_poz)
{
deq_el *curr;
if(d.cap->poz < min_poz)
if (!d.coada)
{
d.cap->el = val;
d.cap->poz = poz;
return;
}
else
{
curr = d.cap;
d.cap = d.cap->next;
d.cap->prev = 0;
free(curr);
}
curr = d.coada;
while(d.coada && d.coada != d.cap && val <= curr->el)
{
curr = d.coada;
d.coada = d.coada->prev;
d.coada->next = 0;
free(curr);
}
if (d.cap == d.coada)
d.coada = 0;
if (d.coada == 0)
if (d.cap->el >= val)
{
d.cap->next = d.cap->prev = 0;
d.cap->el = val;
d.cap->poz = poz;
return;
}
else
{
d.coada = (deq_el*)malloc(sizeof(deq_el));
d.cap->next = d.coada;
d.coada->prev = d.cap;
}
else
{
curr = (deq_el*)malloc(sizeof(deq_el));
d.coada->next = curr;
curr->prev = d.coada;
d.coada = curr;
}
d.coada->next = 0;
d.coada->el = val;
d.coada->poz = poz;
}
int main()
{
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
int n, m, i, x, s = 0;
scanf("%d%d", &n, &m);
deq d;
d.cap = (deq_el*)malloc(sizeof(struct deq_el));
d.coada = 0;
scanf("%d", &d.cap->el);
d.cap->poz = 1;
d.cap->next = d.cap->prev = 0;
for(i=1; i<m-1; ++i)
{
scanf("%d", &x);
insert_deq(d, x, i, i);
}
for(i=m; i<=n; ++i)
{
scanf("%d", &x);
insert_deq(d, x, i, i-m+1);
s += d.cap->el;
}
printf("%d\n", s);
fclose(stdin);
fclose(stdout);
return 0;
}