Pagini recente » Cod sursa (job #984658) | Cod sursa (job #941616) | Cod sursa (job #1047100) | Cod sursa (job #991291) | Cod sursa (job #1068539)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
struct strut{
int b,a;
};
int n,k,j,nr,loc,x,i;
strut h[5000001];
long long s;
int minim(int a,int b)
{
if(h[a].b<h[b].b)
return a;
return b;
}
int main()
{
f>>n>>k;
h[0].b=-10000001;
for(i=1;i<=k;i++)
{
f>>x;
h[i].b=x;
h[i].a=i;
j=i;
while(h[j].b<h[j/2].b)
{
swap(h[j],h[j/2]);
j/=2;
}
}
s+=h[1].b;
nr=k;
for(i=k+1;i<=n;i++)
{
nr++;
f>>x;
h[nr].b=x;h[nr].a=i;
j=nr;
while(h[j].b<h[j/2].b)
{
swap(h[j],h[j/2]);
j/=2;
}
while(!(h[1].a>=i-k+1&&h[1].a<=i))
{
swap(h[1],h[nr]);
nr--;
j=1;
while(2*j+1<=nr)
{
loc=minim(2*j,2*j+1);
if(!(h[j].b>h[loc].b))
break;
swap(h[j],h[loc]);
j=loc;
}
if(2*j==nr && h[j].b>h[2*j].b)
swap(h[j],h[2*j]);
}
s+=h[1].b;
}
g<<s;
f.close();g.close();
return 0;
}