Pagini recente » Cod sursa (job #201451) | Cod sursa (job #1847866) | Clasament preoni6 | Cod sursa (job #1497708) | Cod sursa (job #778069)
Cod sursa(job #778069)
#include <stdio.h>
#define NMAX 5000000
int n, i, j, k;
int deqVal[NMAX], deqPos[NMAX];
long long int result = 0;
int p, q;
void Enqueue(int val, int pos);
int GetMinVal();
int GetMinPos();
void Dequeue();
int main()
{
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
scanf("%d %d\n", &n, &k);
p = 0; q = -1;
for (i = 0; i < k; i++)
{
scanf("%d", &j);
Enqueue(j, i);
}
result = GetMinVal();
for (i = k; i < n; i++)
{
scanf("%d", &j);
Enqueue(j, i);
if (GetMinPos() < i-k+1)
Dequeue();
result += GetMinVal();
}
printf("%lld\n", result);
return 0;
}
void Enqueue(int val, int pos)
{
q++;
while (p < q && val <= deqVal[q-1])
{
q--;
}
deqVal[q] = val;
deqPos[q] = pos;
}
void Dequeue()
{
p++;
}
int GetMinVal()
{
return deqVal[p];
}
int GetMinPos()
{
return deqPos[p];
}