Pagini recente » Cod sursa (job #2739874) | Cod sursa (job #2533) | Cod sursa (job #1953615) | ONIS 2014, Clasament Runda 1 | Cod sursa (job #825262)
Cod sursa(job #825262)
#include<cstdio>
#define NMAX 5000004
struct heap{
int val;
int poz;
};
heap v[NMAX];
long long s=0;
int p,m,i,j,n,k;
void urca(int p)
{
heap aux;
if(v[p/2].val>v[p].val&&p>1)
{
aux=v[p/2];
v[p/2]=v[p];
v[p]=aux;
urca(p/2);
}
}
void coboara(int p)
{
int min=p;
heap aux;
if(v[min].val>v[2*p].val&&2*p<=n)
min=2*p;
if(v[min].val>v[2*p+1].val&&2*p<=n)
min=2*p+1;
if(min!=p)
{
aux=v[min];
v[min]=v[p];
v[p]=aux;
}
}
void push(heap p)
{
v[++n]=p;
urca(n);
}
void pop()
{
while(v[1].poz+k-1<=p)
{
v[1]=v[n--];
coboara(1);
}
}
int main()
{
heap x;
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
scanf("%d%d",&m,&k);
for(p=1;p<=m;p++)
{
scanf("%d",&x.val);
x.poz=p;
push(x);
if(p>=k)
s+=v[1].val,pop();
}
printf("%d",s);
return 0;
}