Cod sursa(job #235524)

Utilizator filipbFilip Cristian Buruiana filipb Data 24 decembrie 2008 12:07:58
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>  
#include <assert.h>  
  
#define ll long long  
#define NMax 5000005  
   
int N, K;  
int poz[NMax], v[NMax];  
ll Res;  
   
int main()  
{  
     int i, f, l, j;  
       
     freopen("deque.in", "r", stdin);  
     freopen("deque.out", "w", stdout);  
       
     scanf("%d %d", &N, &K);  
     assert(1 <= N && N <= 5000000);  
     assert(1 <= K && K <= N);  
     for (i = 1; i <= N; ++i)  
     {  
         scanf("%d", &v[i]);  
         assert(-10000000 <= v[i] && v[i] <= 10000000);  
     }  
   
     f = 1; l = 0;  
     for (i = 1; i <= N; ++i)  
     {  
         for (; f <= l && poz[f] <= i-K; ++f);  
         for (; f <= l && v[i] <= v[poz[l]]; --l);  
         poz[++l] = i;  
         if (i >= K)  
            Res += v[poz[f]];             
     }    
       
     printf("%lld\n", Res);  
     
     return 0;  
}