Cod sursa(job #1770176)

Utilizator dodecagondode cagon dodecagon Data 3 octombrie 2016 20:31:54
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>

const int buff_size=4096;
char buff[buff_size];
int _i=buff_size;


int n,k,pr,ul,a[5000009],d[5000009],i;

long long sum;


int next_int(FILE * in)
{
    char x,y,k=1;
    int z=0;
   
   if (_i==buff_size)
    y=fread(buff,buff_size,1,in),_i=0;
      
     x=1;
 
      while ((x<48 || x> 57) && x!='-')
         {  
          x=buff[_i];
          _i++;
          if (_i==buff_size)
             {
              y=fread(buff,buff_size,1,in);
              _i=0;
             }
         }
 
      while (x>=48 && x<=57 || x=='-')
      {
        if (x=='-') 
          k=-1; else 
        z=(z<<1)+(z<<3)+x-48;
        x=buff[_i];
        _i++;
         if (_i==buff_size)
           {
               y=fread(buff,buff_size,1,in);
               _i=0;
             }
      }
 
    return z*k;
}

int main(int argc, char const *argv[])
{

	freopen("deque.in","r",stdin);
	freopen("deque.out","w",stdout);


	    n=next_int(stdin);
	    k=next_int(stdin);

	    for (i=0;i<n;++i)
	    	a[i]=next_int(stdin);

        d[0]=0;
        pr=0;ul=0;

        for (i=1;i<n;++i)
        {
        	while (pr<=ul && a[i]<=a[d[ul]]) ul--;
        	d[++ul]=i;

        	if (i-d[pr]>=k) pr++;
            if (i+1>=k) sum+=a[d[pr]];
        }

    printf("%I64d\n",sum);

	fclose(stdin);
	fclose(stdout); 

	return 0;
}