Advertisement
maycod23

Untitled

Jun 20th, 2022
829
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 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