Pagini recente » Cod sursa (job #1924532) | Cod sursa (job #508030) | Cod sursa (job #2631339) | Cod sursa (job #1533813) | Cod sursa (job #824316)
Cod sursa(job #824316)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
struct pereche
{
int heap;
int po;
} v[5000000];
int n,k;
int nr=0;
void schimba (int i,int j)
{
pereche aux=v[i];
v[i]=v[j];
v[j]=aux;
}
void urca(int a)
{
v[nr].heap=a;
int i=nr;
while (v[i].heap<v[i/2].heap && i>1)
{
schimba(i,i/2);
i=i/2;
}
}
void coboara(int i)
{
int fst=2*i;
int fdr=2*i+1;
int fbun=i;
if ( fst<=nr && v[fst].heap<v[fbun].heap) fbun=fst;
if ( fdr<=nr && v[fdr].heap<v[fbun].heap) fbun=fdr;
if (fbun!=i)
{
schimba(i,fbun);
coboara(fbun);
}
}
int main()
{ long long suma=0;
in>>n>>k;
int i,a;
for (i=1;i<=k;i++)
{
in>>a;
v[++nr].po=i;
urca(a);
}
suma+=v[1].heap;
for (i=k+1;i<=n;i++)
{
in>>a;
v[++nr].po=i;
urca(a);
while ( v[1].po<i-k+1 && nr>0 )
{
v[1]=v[nr];
nr--;
coboara(1);
}
suma+=v[1].heap;
}
out<<suma;
return 0;
}