Cod sursa(job #321844)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 7 iunie 2009 16:24:28
Problema Deque Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <stdio.h>
#define Nmax 5000005

long a[Nmax],deq[Nmax],poz[Nmax];
long nd,z,n,k,i;
long long sum=0;

int main(){
	freopen("deque.in","r",stdin);
   freopen("deque.out","w",stdout);
   scanf("%ld%ld",&n,&k);
   for(i=1;i<=n;++i) scanf("%ld",&a[i]);
   deq[++nd]=a[1];  poz[nd]=1;
   for(i=2;i<k;++i)
     if(a[i]>= deq[nd]) deq[++nd]=a[i],poz[nd]=i;
     else{
       while(a[i] < deq[nd] && nd>0) --nd;
       deq[++nd] =a[i],poz[nd]=i;
     }
   for(i=k;i<=n;++i){
     if(a[i]>= deq[nd]) deq[++nd]=a[i],poz[nd]=i;
     else{
       while(a[i] < deq[nd] && nd>0) --nd;
       deq[++nd] =a[i],poz[nd]=i;
     }
     z=1;
     while(poz[z]< i-k+1) z++;
     sum += deq[z];
   }

   printf("%lld\n",sum);
   fclose(stdin); fclose(stdout);
   return 0;
}