Cod sursa(job #250020)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 29 ianuarie 2009 21:02:52
Problema Deque Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#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;
}