Pagini recente » Cod sursa (job #2565872) | Cod sursa (job #2106441) | Cod sursa (job #1504099) | Cod sursa (job #1527705) | Cod sursa (job #1059014)
#include<algorithm>
#include<fstream>
#define maxn 5000001
using namespace std;
ifstream fi("deque.in");
ofstream fo("deque.out");
int g,poz[maxn],a[maxn],k=0,n=0,r;
int i,t,x,heap[maxn];
long long s=0;
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>>g;
for(i=1;i<g;i++){ fi>>x; insertheap(n,x); }
for(;i<=r;i++){
fi>>x;
insertheap(n,x);
s+=a[heap[1]];
while(heap[1]<=i-g+1) deleteheap(n,i-g+1);
}
fo<<s;
fi.close();
fo.close();
return 0;
}