Cod sursa(job #256312)

Utilizator alecmanAchim Ioan Alexandru alecman Data 11 februarie 2009 15:39:27
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<stdio.h>

#define INPUT "deque.in"
#define OUTPUT "deque.out"
#define NMAX 5000001
#define LL long long

FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");

long N, K, startPoint, endPoint;
long A[ NMAX ], Deq[ NMAX ];
LL Sum;

void readData()
{
  fscanf(fin, "%ld %ld", &N, &K);
  for(long i = 0; i < N; ++i)
    fscanf(fin, "%ld", &A[i]);
}

void solveInput()
{
  startPoint = 0;
  endPoint = -1;

  for(long i = 0; i < N; ++i)
  {
    while( startPoint <= endPoint && A[ Deq[ endPoint ] ] >= A[ i ] )
      --endPoint;

    ++endPoint;

    Deq[ endPoint ] = i;

    if( i >= K - 1 )
      Sum += A[ Deq[ startPoint ] ];
    
    if( Deq[ startPoint ] <= i - K + 1)
      ++startPoint;
  }

  fprintf(fout, "%lld\n", Sum);
}

int main()
{
  Sum = 0;

  readData();

  solveInput();

  fclose(fin);
  fclose(fout);

  return 0;
}