Pagini recente » Cod sursa (job #1653391) | Cod sursa (job #1501206) | Cod sursa (job #937140) | Cod sursa (job #131333) | Cod sursa (job #250020)
Cod sursa(job #250020)
#include <stdio.h>
#include <deque.h>
using namespace std;
deque <int> D,poz;
long S;
int n,k;
int main ()
{
int x;
freopen ("deque.in","r",stdin);
freopen ("deque.out","w",stdout);
scanf ("%d %d",&n,&k);
D.clear();
poz.clear();
for (int i=0;i<n;i++)
{
scanf ("%d",&x);
while (D.size() && i-poz.front()>=k)
{
D.pop_front();
poz.pop_front();
}
while (D.size() && i-poz.back()>=k)
{
D.pop_back();
poz.pop_back();
}
if (!D.size())
{
D.push_front(x);
poz.push_front(i);
}
else
if (x>D.back())
{
D.push_back(x);
poz.push_back(i);
}
else
if (x<D.front())
{
D.push_front(x);
poz.push_front(i);
}
else
{
while (x<D.back())
{
D.pop_back();
poz.pop_back();
}
D.push_back(x);
poz.push_back(i);
}
if (i+1>=k)
S+=D.front();
}
printf("%ld\n",S);
return 0;
}