Advertisement
maycod23

Untitled

Jun 13th, 2022
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.95 KB | None | 0 0
  1. class Solution {
  2. public:
  3. long long countSubarrays(vector<int>& a, long long k) {
  4. long long ans=0;
  5. int n=a.size();
  6. vector<long long> prefix(n,0); prefix[0]=a[0];
  7. for(int i=1;i<n;i++) prefix[i]=prefix[i-1]+(long long)a[i];
  8. for(int i=0;i<n;i++)
  9. {
  10. int l=0,r=i,temp=n+1;
  11. //first l where score[l,r]*(r-l+1)<k
  12. while(l<=r)
  13. {
  14. int mid=(l+r)/2;
  15. long long sum=prefix[i];
  16. if(mid!=0) sum-=prefix[mid-1];
  17. long long score=(sum*(long long)(i-mid+1));
  18.  
  19. if(score>=k){
  20. l=mid+1; continue;
  21. }
  22. else{
  23. temp=min(temp,mid);
  24. r=mid-1; continue;
  25. }
  26. }
  27. if(temp!=(n+1)) ans+=(i-temp+1);
  28. }
  29. return ans;
  30. }
  31. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement