Pagini recente » Cod sursa (job #3255158) | Cod sursa (job #1768571) | Cod sursa (job #2044692) | Cod sursa (job #2005527) | Cod sursa (job #1923464)
#include<fstream>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int hp[5000001];
int poz[5000001];
int vl[5000001];
int lhp=0;
void hpup(int el,int indx){
int aux;
while(indx>>1>0&&vl[el]<vl[hp[indx>>1]]){
aux=el;
hp[indx]=hp[indx>>1];
hp[indx>>1]=aux;
poz[hp[indx>>1]]=indx>>1;
poz[hp[indx]]=indx;
indx>>=1;
}
}
void hpdown(int el,int indx){
int aux;
while(1){
if(indx<<1<=lhp&&vl[el]>vl[hp[indx<<1]]&&((indx<<1)+1>lhp||vl[hp[indx<<1]]<=vl[hp[1+(indx<<1)]])){
aux=el;
hp[indx]=hp[indx<<1];
hp[indx<<1]=el;
poz[hp[indx]]=indx;
poz[hp[indx<<1]]=indx<<1;
indx<<=1;
}
else if(1+(indx<<1)<=lhp&&vl[el]>vl[hp[1+(indx<<1)]]&&vl[hp[1+(indx<<1)]]<=vl[hp[indx<<1]]){
aux=el;
hp[indx]=hp[1+(indx<<1)];
hp[1+(indx<<1)]=el;
poz[hp[indx]]=indx;
poz[hp[1+(indx<<1)]]=1+(indx<<1);
indx<<=1;
indx++;
}
else break;
}
}
void inserthp(int el,int indx){
if(!hp[indx]){hp[indx]=el;poz[el]=indx;}
if(indx>>1>0&&vl[el]<vl[hp[indx>>1]])hpup(el,indx);
else hpdown(el,indx);
}
int main(){
int n,k,i,j,s=0,el,indx;
fin>>n>>k;
for(i=1;i<=k;i++){
fin>>el;
vl[i]=el;
inserthp(i,++lhp);
}
s+=vl[hp[1]];
j=k;
while(j<n){
fin>>el;
++j;
indx=j%k;
if(!indx)indx=k;
vl[indx]=el;
inserthp(indx,poz[indx]);
s+=vl[hp[1]];
}
fout<<s<<'\n';
fin.close();
fout.close();
}