Pagini recente » Cod sursa (job #819967) | Cod sursa (job #1560679) | Cod sursa (job #1880609) | Cod sursa (job #1266110) | Cod sursa (job #1863134)
#include<fstream>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
struct pereche
{
int val, poz;
};
pereche heap[5000002];
int n,x,i,nh,k;
long long s;
void urcare(pereche heap[],int p)
{
pereche aux;
while(p>=2&&heap[p/2].val>heap[p].val)
{
aux=heap[p/2];
heap[p/2]=heap[p];
heap[p]=aux;
p=p/2;
}
}
void coborare(pereche heap[],int nh, int p)
{
pereche aux;
int r;
while(2*p<=nh)
{
r=2*p;
if(r+1<=nh&&heap[r+1].val<heap[r].val)
{
r++;
}
if(heap[r].val<heap[p].val)
{
aux=heap[r];
heap[r]=heap[p];
heap[p]=aux;
p=r;
}
else
{
break;
}
}
}
int main()
{
fin>>n>>k;
s=0;
for(i=1;i<=k;i++)
{
fin>>x;
heap[i].val=x;
heap[i].poz=i;
urcare(heap,i);
}
s=s+heap[1].val;
nh=k;
for(i=k+1;i<=n;i++)
{
fin>>x;
nh++;
heap[nh].val=x;
heap[nh].poz=i;
urcare(heap,nh);
while(heap[1].poz<=i-k)
{
heap[1]=heap[nh];
nh--;
coborare(heap,nh,1);
}
s=s+heap[1].val;
}
fout<<s;
fin.close();
fout.close();
return 0;
}