Pagini recente » Cod sursa (job #351555) | Cod sursa (job #3164756) | Cod sursa (job #3292707) | Cod sursa (job #2757440) | Cod sursa (job #2081399)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int h[5000003],v[5000003],k,n,i,nh;
long long s;
void urcare(int i)
{
int aux;
while(i>=2 && v[h[i/2]]>v[h[i]])
{
aux=h[i];
h[i]=h[i/2];
h[i/2]=aux;
i=i/2;
}
}
void coborare(int i,int nh)
{
int r,aux;
while(2*i<=nh)
{
r=2*i;
if(r+1<=nh && v[h[r]]>v[h[r+1]])
{
r=r+1;
}
if(v[h[i]]>v[h[r]])
{
aux=h[i];
h[i]=h[r];
h[r]=aux;
i=r;
}
else
{
break;
}
}
}
int main()
{
fin>>n>>k;
for(i=1;i<=n;i++)
{
fin>>v[i];
}
nh=0;
for(i=1;i<=k;i++)
{
nh++;
h[nh]=i;
urcare(nh);
}
s=0;
for(i=1;i<=n-(k-1);i++)
{
while(h[1]<i)
{
h[1]=h[nh];
nh--;
coborare(1,nh);
}
s=s+v[h[1]];
nh++;
h[nh]=i+k;
urcare(nh);
}
fout<<s;
fin.close();
fout.close();
return 0;
}