Pagini recente » Cod sursa (job #2562118) | Cod sursa (job #49814) | Cod sursa (job #3190763) | Cod sursa (job #205647) | Cod sursa (job #1464867)
#include <iostream>
#include <fstream>
using namespace std;
fstream in("deque.in", ios::in);
fstream out("deque.out", ios::out);
struct nod
{
int info,poz;
nod *next;
nod *prev;
} *cap, *coada, *p, *q;
long suma;
int n,k,nr,i=1;
void sterge_coada();
void adauga_coada(nod*);
void sterge_cap();
int main()
{
int x;
in>>n>>k;
p=new nod;
in>>p->info;
p->poz=i++;
adauga_coada(p);
while(in>>x)
{
if(cap->poz<=i-k)
sterge_cap();
p=new nod;
p->info=x;
p->poz=i++;
while(coada != 0 && p->info < coada->info)
sterge_coada();
adauga_coada(p);
if(i >= k+1)
suma+= cap->info;
}
out<<suma;
in.close();
out.close();
return 0;
}
void sterge_coada()
{
if(coada != cap)
{
q=coada;
coada=coada->prev;
coada->next=0;
delete q;
}
else
{
delete coada;
coada=0;
cap=0;
}
}
void adauga_coada(nod *node)
{
if(coada == cap)
if(cap != 0)
{
cap->next=node;
node->prev=cap;
node->next=0;
coada=node;
}
else
{
cap=node;
coada=node;
cap->next=0;
cap->prev=0;
}
else
{
coada->next=node;
node->prev=coada;
node->next=0;
coada=coada->next;
}
}
void sterge_cap()
{
if(cap != coada)
{
q=cap;
cap=cap->next;
cap->prev=0;
delete q;
}
else
{
delete cap;
cap=0;
coada=0;
}
}