Pagini recente » Cod sursa (job #2337766) | Cod sursa (job #2429326) | Cod sursa (job #1021097) | Cod sursa (job #1411531) | Cod sursa (job #543154)
Cod sursa(job #543154)
#include<iostream.h>
#include<fstream.h>
#define N 5000001
typedef struct deque
{long elem[N],nel,prim,ultim;};
long a[N],n,k,i,j,r,l,t,b[N]={0};
long long s=0;
deque q;
void addEnd(deque &q,long x)
{q.nel++;
q.elem[q.ultim++]=x;}
long delBeg(deque &q)
{q.nel--;
return q.elem[q.prim++];}
long delEnd(deque &q)
{q.nel--;
return q.elem[--q.ultim];}
int main()
{q.nel=q.prim=q.ultim=0;
ifstream f1("deque.in");
ofstream f2("deque.out");
f1>>n>>k;
for(i=1;i<=n;i++)
{f1>>a[i];
while(q.nel!=0&&a[i]<q.elem[q.ultim-1])
delEnd(q);
addEnd(q,a[i]);
if(q.nel==1)
{b[q.prim]=1;
b[q.ultim]=0;}
else
{j=q.prim;
while(j<q.ultim-1)
{b[j]++;
j++;}
b[q.ultim-1]=1;
b[q.ultim]=0;}
if(((q.nel==1&&q.prim==i-k)||(q.prim<i-k&&q.nel<k)||(i==k&&b[q.prim]>1))&&b[q.prim]<k)
{s+=q.elem[q.prim];
if(q.nel==1)
b[q.prim]=1;}
else
if(q.nel==k||b[q.prim]==k||q.prim==i-k||(i==k&&b[q.prim]==1))
s+=delBeg(q);}
f2<<s;
f1.close();
f2.close();
return 0;}