Advertisement
a53

secv

a53
Dec 4th, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  1. #include <cstdio>
  2. #define MAXN 1000001
  3. using namespace std;
  4. int A[MAXN],B[MAXN],N,K,S,P,i;
  5.  
  6. void rezolv1()
  7. {
  8. int inapoi=0,Nr=0;
  9. for(int i=1;i<=N;++i)
  10. {
  11. B[inapoi+1]=B[inapoi]+A[i]; /// Sumele partiale
  12. ++inapoi;
  13. if(inapoi>=K&&B[inapoi]-B[inapoi-K]>S)
  14. ++Nr,inapoi-=K;
  15. }
  16. printf("%d\n",Nr);
  17. }
  18.  
  19. void rezolv2()
  20. {
  21. int inainte=1,inapoi=0,Nr=0;
  22. for(int i=1;i<=N;++i)
  23. A[i]+=A[i-1];
  24. for(i=1;i<=N;++i)
  25. {
  26. if(i+K<=N)
  27. {
  28. while(inainte<=inapoi&&A[i+K]-A[i-1]>=A[B[inapoi]+K]-A[B[inapoi]-1])
  29. --inapoi;
  30. B[++inapoi]=i;
  31. }
  32. if(A[B[inainte]+K]-A[B[inainte]-1]-(A[i]-A[i-1])>S)
  33. ++Nr;
  34. if(B[inainte]==i-K)
  35. ++inainte;
  36. }
  37. printf("%d",Nr);
  38. }
  39.  
  40. int main()
  41. {
  42. freopen("secv.in","r",stdin);
  43. freopen("secv.out","w",stdout);
  44. scanf("%d",&P);
  45. scanf("%d %d %d",&N,&K,&S);
  46. for(i=1;i<=N;++i)
  47. scanf("%d",&A[i]);
  48. if(P==1)
  49. rezolv1();
  50. if(P==2)
  51. rezolv2();
  52. return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement