fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. long int B[400000],N;
  5.  
  6. int main(int argc,char *argv[])
  7. {
  8. long int W,L,R,min,sum=0,ans=0,min_index=0,fin_count=0;
  9. register i,j,p,l;
  10. int count=0;
  11. //float start,end;
  12. //start=clock();
  13. scanf("%ld %ld",&N,&W);
  14. for(i=0;i<N;i++)
  15. scanf("%ld",&B[i]);
  16. if(W==0)
  17. {
  18. printf("0");
  19. exit(0);
  20. }
  21. if(W==1)
  22. {
  23. printf("%ld",N);
  24. exit(0);
  25. }
  26. min=B[N-1];
  27. min_index=N-1;
  28. for(i=N-1,p=N-1;i>=0;i--)
  29. {
  30. count=0;
  31. R=i;
  32. L=R-W+1;
  33. sum=sum+B[i];
  34. if(B[i]<min)
  35. {
  36. min=B[i];
  37. min_index=i;
  38. }
  39. if(N-i>=W)
  40. {
  41. if(min_index>i+W-1)
  42. {
  43. if(B[i]<B[i+W-1])
  44. min=B[i];
  45. else
  46. min=B[i+W-1];
  47. //min_index=i;
  48. if(((W*(2*min+(W-1)))/2)<=sum){}
  49. //break;
  50. else
  51. for(l=i+1;l<=i+W-1;l++)
  52. {
  53. if(B[l]<min)
  54. {
  55. min=B[l];
  56. min_index=l;
  57. }
  58.  
  59. }
  60. }
  61. }
  62. ans=((W*(2*min+(W-1)))/2);
  63. //printf("ans is %lld and sum is %lld for min %lld flag=%d\n",ans,sum,min,flag);
  64. if(ans==sum&&(N-i)>=W)
  65. fin_count++;
  66. if(N-i>=W)
  67. sum=sum-B[p--];
  68. }
  69. //end=clock();
  70. //printf("%d %f\n",fin_count,(end-start)/CLOCKS_PER_SEC);
  71. printf("%ld",fin_count);
  72. }
  73.  
Runtime error #stdin #stdout 0.02s 3240KB
stdin
7 3
7 6 5 4 3 2 1
stdout
5