Cod sursa(job #1611101)
Utilizator | Data | 23 februarie 2016 22:32:48 | |
---|---|---|---|
Problema | Deque | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.62 kb |
#include <cstdio>
using namespace std;
int v[5000001];
int deq[5000001];
int main()
{
FILE *fin = fopen("deque.in", "r");
FILE *fout = fopen("deque.out", "w");
long long int suma = 0;
int n, k, fr, ba;
fscanf(fin, "%d%d", &n, &k);
fr = 1;
ba = 0;
for(int i = 1; i <= n; ++i){
fscanf(fin, "%d", &v[i]);
while(ba >= fr && v[i] <= v[deq[ba]])
ba--;
deq[++ba] = i;
if(i >= k)
suma += 1LL * v[deq[fr]];
if(i - k + 1 >= deq[fr])
fr++;
}
fprintf(fout, "%lld", suma);
return 0;
}