Pagini recente » Borderou de evaluare (job #1468597) | Cod sursa (job #1294225)
#include <stdio.h>
FILE *fin , *fout;
#define N 5000001
int st=1 , dr=0 , d[N] ,n ,k ,v[N];
long long s=0;
void stanga (int i)
{
if(i-d[st]==k)
{
st++;
}
}
void dreapta (int i)
{
while(st<=dr && v[i]<=v[d[dr]])
{
dr--;
}
d[++dr]=i;
}
int main()
{
int j;
fin = fopen("deque.in" , "r");
fout = fopen("deque.out" , "w");
fscanf(fin ,"%d%d" ,&n ,&k);
for(j=1;j<=n;j++)
{
fscanf(fin ,"%d" ,&v[j]);
}
for(j=1;j<k;j++)
{
stanga(j);
dreapta(j);
}
for(j=k;j<=n;j++)
{
stanga(j);
dreapta(j);
s+=v[d[st]];
}
fprintf(fout ,"%lld" ,s);
return 0;
}