Cod sursa(job #1594076)
Utilizator | Data | 9 februarie 2016 10:29:30 | |
---|---|---|---|
Problema | Deque | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.65 kb |
#include <fstream>
#include <cstdio>
#define NMax 5000005
using namespace std;
long long n,k;
long long a[NMax],q[NMax];
int main()
{
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
scanf("%I64d%I64d",&n,&k);
for(int i = 1; i <= n; ++i){
scanf("%I64d",&a[i]);
}
long long s = 0;
long long fr = 1, bk = 0;
for(int i = 1; i <= n; ++i){
while(fr <= bk && a[i] <= a[q[bk]]){
bk--;
}
q[++bk] = i;
if(q[fr] == i - k){
fr++;
}
if(i >= k)
s += a[q[fr]];
}
printf("%I64d",s);
return 0;
}