Pagini recente » Cod sursa (job #963931) | Cod sursa (job #2024051) | Cod sursa (job #3172331) | Cod sursa (job #2267931) | Cod sursa (job #1320565)
#include <cstdio>
#include <algorithm>
#define maxn 500001
#define numberlimit 10000001
using namespace std;
long long int v[maxn],poz[maxn],sum;
int nv,nh,a,i,x,h[maxn],k;
void percolate(int n)
{
while (n/2 && v[h[n]]<v[h[n/2]])
{
swap(poz[h[n]], poz[h[n/2]]);
swap(h[n], h[n/2]);
n/=2;
}
}
void sift(int n)
{
while(n<=nh/2)
{
if(v[h[n]]>v[h[2*n]] || v[h[n]]>v[h[2*n+1]])
{
if(v[h[2*n]]<v[h[2*n+1]])
{
swap(poz[h[n]], poz[h[2*n]]);
swap(h[n],h[2*n]);
n*=2;
}
else
{
swap(poz[h[n]], poz[h[2*n+1]]);
swap(h[n],h[2*n+1]);
n=2*n + 1;
}
}
else return;
}
}
void deletee(int n)
{
poz[h[nh]]=poz[n];
h[poz[n]]=h[nh];
nh--;
if(poz[n]>1 && v[h[poz[n]]]<v[h[poz[n]/2]])
percolate(poz[n]);
else
sift(poz[n]);
}
inline void insertt(int x)
{
nh++;
nv++;
v[nv]=x;
h[nh]=nv;
poz[nv]=nh;
percolate(nh);
}
void afisare()
{
for(int t=1;t<=nh;t++)
printf("%d ", v[h[t]]);
printf("\n");
}
int main()
{
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
int n,j;
v[0]=numberlimit;
scanf("%d %d ", &n, &k);
for (i=1;i<k;i++)
{
scanf("%d ", &a);
insertt(a);
// afisare();
}
for(i=k;i<=n;i++)
{
scanf("%d ", &a);
insertt(a);
sum+=v[h[1]];
// afisare();
// printf("%d\n", sum);
deletee(i-k+1);
}
printf("%d", sum);
}