Pagini recente » Rating cont de incercari (Mircea_Andrei) | Cod sursa (job #2355969) | Cod sursa (job #1286677) | Cod sursa (job #1635718) | Cod sursa (job #1277497)
//parsare - daca e nevoie
#include <stdio.h>
#define NMAX 5000023
FILE *fin, *fout;
int n, k, dr = 0, st = 1, temp;
long long int sum;
bool f;
struct deq
{
int val;
int poz;
} d[NMAX];
int main()
{
fin = fopen("deque.in", "r");
fout = fopen("deque.out", "w");
fscanf(fin, "%d%d", &n, &k);
for(int i = 1; i< k; i++)
{
fscanf(fin, "%d", &temp);
if(!f)
{
dr++;
d[dr].val = temp;
d[dr].poz = i;
f = 1;
continue;
}
while(dr>=st && temp<=d[dr].val)
{
dr--;
}
dr++;
d[dr].val = temp;
d[dr].poz = i;
}
for(int i = k; i<=n; i++)
{
fscanf(fin, "%d", &temp);
if(d[st].poz <= i - k) st++;
while(dr>=st && temp<=d[dr].val)
{
dr--;
}
dr++;
d[dr].val = temp;
d[dr].poz = i;
sum+=(int)d[st].val;
}
fprintf(fout, "%lld\n", sum);
fclose(fin);
fclose(fout);
return 0;
}