Pagini recente » Cod sursa (job #2062415) | Cod sursa (job #159272) | Cod sursa (job #507803) | Cod sursa (job #1918270) | Cod sursa (job #1047378)
#include <fstream>
using namespace std;
ifstream cin("deque.in");
ofstream cout("deque.out");
struct heap
{
int v, nr;
};
int n, k, p[5000001], i, nr, x, l;
long long s;
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<k; i++)
{
cin>>x;
push(x, ++l,++nr);
}
for(; i<=n; i++)
{
cin>>x;
push(x, ++l,++nr);
s+=h[1].v;
pop(p[nr-k+1]);
}
cout<<s;
return 0;
}