Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- long long countSubarrays(vector<int>& a, long long k) {
- long long ans=0;
- int n=a.size();
- vector<long long> prefix(n,0); prefix[0]=a[0];
- for(int i=1;i<n;i++) prefix[i]=prefix[i-1]+(long long)a[i];
- for(int i=0;i<n;i++)
- {
- int l=0,r=i,temp=n+1;
- //first l where score[l,r]*(r-l+1)<k
- while(l<=r)
- {
- int mid=(l+r)/2;
- long long sum=prefix[i];
- if(mid!=0) sum-=prefix[mid-1];
- long long score=(sum*(long long)(i-mid+1));
- if(score>=k){
- l=mid+1; continue;
- }
- else{
- temp=min(temp,mid);
- r=mid-1; continue;
- }
- }
- if(temp!=(n+1)) ans+=(i-temp+1);
- }
- return ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement