Cod sursa(job #363758)

Utilizator andreitheo87Teodorescu Andrei-Marius andreitheo87 Data 14 noiembrie 2009 17:24:26
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#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;
}