Pagini recente » Cod sursa (job #2716782) | Cod sursa (job #48750) | Cod sursa (job #2164765) | Cod sursa (job #2873213) | Cod sursa (job #1023417)
#include <stdio.h>
using namespace std;
FILE *f,*g;
int n,k,a[5000003],pos[5000003],h[5000005],i;
long long s;
void swap (int i,int j)
{
int aux=h[i];
h[i]=h[j];
h[j]=aux;
pos[h[i]]=i;
pos[h[j]]=j;
}
void dw (int k,int n)
{
int st=k*2;
if (st<=n)
{
if (a[h[st]]>a[h[st+1]] && st+1<=n) st++;
if (a[h[k]]>a[h[st]])
{
swap (st,k);
dw (st,n);
}
}
}
void up (int k)
{
int t=k/2;
if (t>0)
if (a[h[t]]>a[h[k]])
{
swap (t,k);
up (t);
}
}
int main()
{f=fopen ("deque.in","r");
g=fopen ("deque.out","w");
fscanf (f,"%d%d",&n,&k);
for (i=1;i<=k;i++)
{
fscanf (f,"%d",&a[i]);
pos[i]=i;
h[i]=i;
}
for (i=k/2;i>=1;i--) dw (i,k);
s+=a[h[1]];
for (i=k+1;i<=n;i++)
{
fscanf (f,"%d",&a[i]);
pos[i]=pos[i-k];
h[pos[i]]=i;
up (pos[i]);
dw (pos[i],k);
s+=a[h[1]];
}
fprintf (g,"%lld",s);
return 0;
}