Pagini recente » Cod sursa (job #1776242) | Cod sursa (job #1008195) | Cod sursa (job #1592787) | Cod sursa (job #2275510) | Cod sursa (job #1050872)
#include<fstream>
#include<algorithm>
#define minini -10000001
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
struct dub{
int val,poz;
};
int n,k,v[5000001],i,j,nr,h,loc;
dub heap[5000001];
long long sum;
int minim(int a,int b)
{
if(heap[a].val<heap[b].val)
return a;
return b;
}
int main()
{
f>>n>>k;
heap[0].val=minini;
for(i=1;i<=k;i++)
{
f>>v[i];
heap[i].val=v[i];
heap[i].poz=i;
j=i;
while(heap[j].val<heap[j/2].val)
{
swap(heap[j],heap[j/2]);
j/=2;
}
}
sum+=heap[1].val;
nr=k;
for(i=k+1;i<=n;i++)
{
nr++;
f>>v[i];
heap[nr].val=v[i];heap[nr].poz=i;
j=nr;
while(heap[j].val<heap[j/2].val)
{
swap(heap[j],heap[j/2]);
j/=2;
}
while(!(heap[1].poz>=i-2&&heap[1].poz<=i))
{
swap(heap[1],heap[nr]);
nr--;
h=1;loc=minim(2*h,2*h+1);
while(heap[h].val>heap[loc].val&&2*h+1<=nr)
{
swap(heap[h],heap[loc]);
h=loc;loc=minim(2*h,2*h+1);
}
if(2*h+1>nr)
if(2*h==nr)
if(heap[h].val>heap[2*h].val)
swap(heap[h],heap[2*h]);
}
sum+=heap[1].val;
}
g<<sum;
f.close();g.close();
return 0;
}