Pagini recente » Rating Paul Hegedus (hegedus) | Cod sursa (job #1054173) | Cod sursa (job #886405) | Cod sursa (job #1253717) | Cod sursa (job #1046713)
#include <fstream>
using namespace std;
ifstream cin("deque.in");
ofstream cout("deque.out");
int n, k, p[5000001], i, nr, x, l;
long long s;
struct heap
{
int v, nr;
};
heap h[5000001];
void schimba(int i, int j)
{
swap(h[i], h[j]);
p[h[i].nr]=i;
p[h[j].nr]=j;
}
void push(int x, int l, int nr)
{
int i=l;
h[i].v=x;
h[i].nr=nr;
p[nr]=i;
while(h[i/2].v>h[i].v && i>1)
{
schimba(i/2, i);
i/=2;
}
}
int minim(int i)
{
if(i*2>l) return 0;
else
{
if(i*2+1>l) return i*2;
if(h[i*2].v<h[i*2+1].v) return i*2;
return i*2+1;
}
}
void pop(int i)
{
int j;
schimba(i, l--);
j=minim(i);
while(i<=l && h[i].v>h[j].v && j)
{
schimba(i, j);
i=j;
j=minim(i);
}
}
int main()
{
cin>>n>>k;
for(i=1; i<=n; i++)
{
cin>>x;
push(x, ++l,++nr);
if(l>k) pop(p[nr-k]);
if(l==k) s+=h[1].v;
}
cout<<s;
return 0;
}