Pagini recente » Cod sursa (job #2734757) | Cod sursa (job #1508991) | Cod sursa (job #215981) | Cod sursa (job #2777226) | Cod sursa (job #1052768)
#include <iostream>
#include <fstream>
using namespace std;
struct heap {
long long val,ind;
} h[5000001];
long long n,k,nr;
void adaug(long long poz)
{
while(poz>1 && h[poz/2].val>h[poz].val)
{
swap(h[poz],h[poz/2]);
poz=poz/2;
}
}
void sj(long long poz)
{
if(poz*2>n)
return ;
long long pozi=poz*2;
if(poz*2+1<=n && h[poz*2+1].val<h[poz*2].val)
pozi=poz*2+1;
if(h[pozi].val<h[poz].val)
{
swap(h[poz],h[pozi]);
sj(pozi);
}
}
int main()
{
ifstream f("deque.in");
ofstream g("deque.out");
long long i,s;
f>>n>>k>>h[1].val;
h[1].ind=1;
for(i=2;i<=k;++i)
{
f>>h[i].val;
h[i].ind=i;
adaug(i);
}
s=h[1].val;
nr=k;
for(i=k+1;i<=n;++i)
{
f>>h[i].val;
while(i-h[1].ind+1>k)
{
h[1].ind=h[nr].ind;
nr--;
sj(1);
}
nr++;
h[nr].ind=i;
adaug(nr);
s=s+h[1].val;
}
g<<s;
f.close();
g.close();
return 0;
}