Pagini recente » Cod sursa (job #407467) | Cod sursa (job #2277042) | Cod sursa (job #908930) | Cod sursa (job #2327289) | Cod sursa (job #1785689)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1000000
#define BUF_SIZE 16384
char buf[BUF_SIZE];
int pbuf=BUF_SIZE;
FILE*fi,*fo;
inline char nextch(){
if(pbuf==BUF_SIZE){
fread(buf, BUF_SIZE, 1, fi);
pbuf=0;
}
return buf[pbuf++];
}
inline long long nextnum(){
long long a=0;
char c=nextch();
while((c<'0' || c>'9') && c!='-')
c=nextch();
int semn=1;
if(c=='-'){
semn=-1;
c=nextch();
}
while('0'<=c && c<='9'){
a=a*10+c-'0';
c=nextch();
}
return a*semn;
}
struct element{
int poz;
int val;
} deque[5000000];
int main(){
fi=fopen("deque.in","r");
fo=fopen("deque.out","w");
int n=nextnum(), k=nextnum();
int p, u;
p=u=0;
long long s=0;
int i;
for(i=1;i<=k;i++){
deque[u].val=nextnum();
deque[u++].poz=i;
while(u>p+1 && deque[u-1].val<deque[u-2].val){
deque[u-2]=deque[u-1];
u--;
}
if(i-deque[p].poz>=k)
p++;
}
s=deque[p].val;
while(i<=n){
deque[u].val=nextnum();
deque[u++].poz=i;
while(u>p+1 && deque[u-1].val<deque[u-2].val){
deque[u-2]=deque[u-1];
u--;
}
if(i-deque[p].poz>=k)
p++;
//for(int j=p;j<u;j++)
// printf("%d ", deque[j].val);
//printf("\n");
s+=deque[p].val;
i++;
}
fprintf(fo,"%lld", s);
fclose(fi);
fclose(fo);
return 0;
}