Pagini recente » Cod sursa (job #293783) | Cod sursa (job #2057220) | Cod sursa (job #1552386) | Cod sursa (job #1685191) | Cod sursa (job #2077380)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int n,i,v[5000003],a[5000003],x,k,l,h[5000003],m,j;
long long s;
void Up(int k, int m)
{
int t,f;
f=k;
t=f/2;
while(t && v[h[t]]>v[h[f]])
{
swap(h[t],h[f]);
f=t;
t=f/2;
}
}
void Down(int k, int m)
{
int t,f;
t=k;
f=k*2;
while(f<=m)
{
if(f<m)
{
if(v[h[f]]>v[h[f+1]]) f++;
}
if(v[h[t]]>v[h[f]])
{
swap(h[t],h[f]);
t=f;
f=f*2;
}
else
{
f=m+1;
}
}
}
int Minim()
{
while(a[h[1]]==1)
{
h[1]=h[l];
l--;
Down(1,l);
}
return v[h[1]];
}
void Inserare(int y)
{
m++;
l++;
v[m]=y;
a[m]=0;
h[l]=m;
Up(l,l);
}
int main()
{
fin>>n>>k;
m=0;
l=0;
s=0;
for(i=1;i<=n;i++)
{
fin>>v[i];
}
for(i=1;i<=k;i++)
{
Inserare(v[i]);
}
s=s+Minim();
a[1]=1;
for(i=2;i<=n-k+1;i++)
{
Inserare(v[i+k-1]);
s=s+Minim();
a[i]=1;
}
fout<<s;
fin.close();
fout.close();
return 0;
}