Pagini recente » Cod sursa (job #2960924) | Cod sursa (job #2692949) | Cod sursa (job #1505843) | Cod sursa (job #2217730) | Cod sursa (job #260178)
Cod sursa(job #260178)
//deque implementat manual cu lista dublu inlantuita
#include <cstdio>
#define N 5000001
typedef struct noduri
{
int val;
noduri *urm,*prev;
} adr;
int n,k,i,A[N],sum=0;
adr *DQ,*li=NULL,*ls=NULL;
void push_back(int nr)
{
adr *p=new adr;
p->val=nr;
p->urm=NULL;
p->prev=ls;
if (ls)
{
ls->urm=p;
ls=p;
}
else
{
ls=p;
li=ls;
}
}
void pop_back()
{
adr *p;
p=ls;
ls=ls->prev;
delete p;
}
void pop_front()
{
adr *p;
p=li;
li=li->urm;
delete p;
}
int main()
{
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
scanf("%d%d\n",&n,&k);
for (i=1; i<=n; i++) scanf("%d\n",&A[i]);
for (i=1; i<=n; i++)
{
while (ls && A[i]<=A[ls->val])
pop_back();
push_back(i);
if (li->val<=i-k)
pop_front();
if (i>=k)
sum+=A[li->val];
}
printf("%d",sum);
return 0;
}