Pagini recente » Cod sursa (job #1730142) | Cod sursa (job #3156894) | Cod sursa (job #507256) | Cod sursa (job #3240290) | Cod sursa (job #1052781)
#include <iostream>
#include <fstream>
using namespace std;
long long a[5000001];
int n,ind[5000001],k,nr;
void adaug(long long poz)
{
long long aux;
while(poz>1 && a[ind[poz/2]]>a[ind[poz]])
{
swap(ind[poz],ind[poz/2]);
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]])
{
swap(ind[mini],ind[poz]);
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)
{
swap(ind[mini],ind[poz]);
sj(mini);
}
}
}
int main()
{
ifstream f("deque.in");
ofstream g("deque.out");
long long s;
int i;
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;
}