Pagini recente » Cod sursa (job #1314416) | Cod sursa (job #1439288) | Cod sursa (job #788429) | Cod sursa (job #1384279) | Cod sursa (job #1049357)
#include <iostream>
#include <fstream>
using namespace std;
long long a[5000001],n,ind[5000001],k,nr;
void adaug(long long poz)
{
long long aux;
while(poz>1 && a[ind[poz/2]]>a[ind[poz]])
{
aux=ind[poz];
ind[poz]=ind[poz/2];
ind[poz/2]=aux;
poz=poz/2;
}
}
void sj(long long poz)
{
long long st,dr,mini,aux;
mini=poz;
st=2*poz;
dr=2*poz+1;
if(st<=nr && dr<=nr)
{
if(a[ind[st]]<a[ind[dr]])
mini=st;
else
mini=dr;
if(a[ind[mini]]<a[ind[poz]])
{
aux=ind[mini];
ind[mini]=ind[poz];
ind[poz]=aux;
sj(mini);
}
}
else
{
if(st<=nr && a[ind[st]]<a[ind[poz]])
mini=st;
else
if(dr<=nr && a[ind[dr]]<a[ind[poz]])
mini=dr;
if(mini!=poz)
{
aux=ind[mini];
ind[mini]=ind[poz];
ind[poz]=aux;
sj(mini);
}
}
}
int main()
{
ifstream f("deque.in");
ofstream g("deque.out");
long long i,s;
f>>n>>k>>a[1];
ind[1]=1;
for(i=2;i<=k;++i)
{
f>>a[i];
ind[i]=i;
adaug(i);
}
s=a[ind[1]];
nr=k;
for(i=k+1;i<=n;++i)
{
f>>a[i];
while(i-ind[1]+1>k)
{
ind[1]=ind[nr];
nr--;
sj(1);
}
nr++;
ind[nr]=i;
adaug(nr);
s=s+a[ind[1]];
}
g<<s;
f.close();
g.close();
return 0;
}