Pagini recente » Monitorul de evaluare | Cod sursa (job #363743) | Cod sursa (job #242805) | Cod sursa (job #3258040) | Cod sursa (job #363758)
Cod sursa(job #363758)
#include<fstream>
#include<iostream>
#include<list>
using namespace std;
const int MAXN = 5000000;
int nr[MAXN],pos[MAXN];
int nrf = 0,nrb = -1,posf = 0,posb = -1;
int k;
void baga(int x,int posi)
{
while( nrf<=nrb && ( nr[nrb] >= x ) )
{
nrb--;
posb--;
}
nr[++nrb] = x;
pos[++posb] = posi;
if( posi - pos[nrf] >= k )
{
nrf++;
posf++;
}
}
int minim()
{
return nr[nrf];
}
int main()
{
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
int n,x;
scanf("%d %d",&n,&k);
for(int i=0; i<k; i++)
{
scanf("%d",&x);
baga(x,i);
}
long long rez = minim();
for(int i=k; i<n; i++)
{
scanf("%d",&x);
baga(x,i);
rez+=minim();
}
printf("%lld\n",rez);
return 0;
}