Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #define MAXN 1000001
- using namespace std;
- int A[MAXN],B[MAXN],N,K,S,P,i;
- void rezolv1()
- {
- int inapoi=0,Nr=0;
- for(int i=1;i<=N;++i)
- {
- B[inapoi+1]=B[inapoi]+A[i]; /// Sumele partiale
- ++inapoi;
- if(inapoi>=K&&B[inapoi]-B[inapoi-K]>S)
- ++Nr,inapoi-=K;
- }
- printf("%d\n",Nr);
- }
- void rezolv2()
- {
- int inainte=1,inapoi=0,Nr=0;
- for(int i=1;i<=N;++i)
- A[i]+=A[i-1];
- for(i=1;i<=N;++i)
- {
- if(i+K<=N)
- {
- while(inainte<=inapoi&&A[i+K]-A[i-1]>=A[B[inapoi]+K]-A[B[inapoi]-1])
- --inapoi;
- B[++inapoi]=i;
- }
- if(A[B[inainte]+K]-A[B[inainte]-1]-(A[i]-A[i-1])>S)
- ++Nr;
- if(B[inainte]==i-K)
- ++inainte;
- }
- printf("%d",Nr);
- }
- int main()
- {
- freopen("secv.in","r",stdin);
- freopen("secv.out","w",stdout);
- scanf("%d",&P);
- scanf("%d %d %d",&N,&K,&S);
- for(i=1;i<=N;++i)
- scanf("%d",&A[i]);
- if(P==1)
- rezolv1();
- if(P==2)
- rezolv2();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement