Pagini recente » Cod sursa (job #3138085) | Cod sursa (job #3151679) | Cod sursa (job #2468864) | Cod sursa (job #1591179) | Cod sursa (job #1058975)
#include<algorithm>
#include<fstream>
#define maxn 5000001
using namespace std;
ifstream fi("deque.in");
ofstream fo("deque.out");
int poz[maxn],a[maxn],k=0,n=0,r;
int i,t,x,heap[maxn];
long long s=0;
short int oper;
void downheap(int n,int x){
int y=0;
while(x!=y)
{
y=x;
if(2*y<=n && a[heap[x]]>a[heap[2*y]]) x=2*y;
if(2*y+1<=n && a[heap[x]]>a[heap[2*y+1]]) x=2*y+1;
swap(heap[x],heap[y]);
poz[heap[x]]=x;
poz[heap[y]]=y;
}
}
void upheap(int nod){
while(nod>1 && a[heap[nod]]<a[heap[nod/2]])
{
swap(heap[nod],heap[nod/2]);
poz[heap[nod]]=nod;
poz[heap[nod/2]]=nod/2;
nod/=2;
}
}
void insertheap(int &n,int x){
n++; k++;
a[k]=x;// valoarea celui de al k element intr. cronologic
heap[n]=k;//in nodul n din heap se afla cel de al k element intr. cronologic
poz[k]=n;//pozitia celui de al k element intr. cronologic in heap
upheap(n);
}
void deleteheap(int &n,int x){
a[x]=-1;
upheap(poz[x]);
poz[heap[1]]=0;
heap[1]=heap[n--];
poz[heap[1]]=1;
downheap(n,1);
}
int main(){
fi>>r>>k;
for(i=1;i<k;i++) {fi>>x; insertheap(n,x);}
for(i=k;i<=r;i++){
fi>>x;
insertheap(n,x);
s+=a[heap[1]];
deleteheap(n,i-k+1);
}
fo<<s;
fi.close();
fo.close();
return 0;
}