#include <bits/stdc++.h>
using namespace std;
int main()
{
//AtMost K -> we are doing that we are finding the longest subarray for the current window
int n=5;
int a[] = {1,11,2,3,15};
int k=10; //sum<=k
int cnt = 0;
int sum = 0;
int i=0 , j=0;
while(j<n)
{
// do calculation
sum = sum + a[j]; // running sum find out kela
if(sum<=k) // if the sum is less than equal to k
{
// finding ans <- from calculation
cnt = cnt + (j-i+1); // keep counting the subarray
j++; // keep on moving 'j' pointer when sum <= k
}
else if(sum>k)
{
while(i<=j && sum>k) // This while loop will run until the sum>k
{
sum = sum - a[i]; // we will start removing the ' i ' index element from the window
i++; // we will increment the ' i ' pointer
}
//after coming from this while loop there can only two possibilities
//Edge case -> why this edge case??
// 1. possibility -> current sum <=k
//2. possibility -> sum==0 or the sum!=0
if(sum<=k && sum!=0) // so when sum<=k and sum!=0 we have go our subarrays
{
cnt = cnt + (j-i+1); // again keep on counting the subarrays
j++;
}
else if(sum==0)
{
j++;
}
}
}
cout<<cnt<<" ";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIAp7CiAgICAvL0F0TW9zdCBLIC0+IHdlIGFyZSBkb2luZyB0aGF0IHdlIGFyZSBmaW5kaW5nIHRoZSBsb25nZXN0IHN1YmFycmF5IGZvciB0aGUgY3VycmVudCB3aW5kb3cgCiAgICAKICAgIGludCBuPTU7CiAgICBpbnQgYVtdID0gezEsMTEsMiwzLDE1fTsKICAgIGludCBrPTEwOyAgIC8vc3VtPD1rCgogICAgaW50IGNudCA9IDA7IAogICAgaW50IHN1bSA9IDA7CgogICAgaW50IGk9MCAsIGo9MDsKCiAgICB3aGlsZShqPG4pCiAgICB7CiAgICAgICAgLy8gZG8gY2FsY3VsYXRpb24KICAgICAgICBzdW0gPSBzdW0gKyBhW2pdOyAvLyBydW5uaW5nIHN1bSBmaW5kIG91dCBrZWxhIAoKICAgICAgICBpZihzdW08PWspICAvLyAgaWYgdGhlIHN1bSBpcyBsZXNzIHRoYW4gZXF1YWwgdG8gayAKICAgICAgICB7CiAgICAgICAgICAgIC8vIGZpbmRpbmcgYW5zIDwtIGZyb20gY2FsY3VsYXRpb24gCiAgICAgICAgICAgIGNudCA9IGNudCArIChqLWkrMSk7ICAvLyBrZWVwIGNvdW50aW5nIHRoZSBzdWJhcnJheSAKCiAgICAgICAgICAgIGorKzsgLy8ga2VlcCBvbiBtb3ZpbmcgJ2onIHBvaW50ZXIgd2hlbiBzdW0gPD0gawogICAgICAgIH0KICAgICAgICBlbHNlIGlmKHN1bT5rKQogICAgICAgIHsKICAgICAgICAgICAgd2hpbGUoaTw9aiAgJiYgIHN1bT5rKSAvLyBUaGlzIHdoaWxlIGxvb3Agd2lsbCBydW4gdW50aWwgdGhlIHN1bT5rCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN1bSA9IHN1bSAtIGFbaV07IC8vIHdlIHdpbGwgc3RhcnQgIHJlbW92aW5nIHRoZSAnIGkgJyBpbmRleCBlbGVtZW50IGZyb20gdGhlIHdpbmRvdwoKICAgICAgICAgICAgICAgIGkrKzsgLy8gd2Ugd2lsbCBpbmNyZW1lbnQgdGhlICcgaSAnIHBvaW50ZXIgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9hZnRlciBjb21pbmcgZnJvbSB0aGlzIHdoaWxlIGxvb3AgdGhlcmUgY2FuIG9ubHkgdHdvIHBvc3NpYmlsaXRpZXMgCiAgICAgICAgICAgIC8vRWRnZSBjYXNlIC0+IHdoeSB0aGlzIGVkZ2UgY2FzZT8/CiAgICAgICAgICAgIC8vIDEuIHBvc3NpYmlsaXR5IC0+IGN1cnJlbnQgc3VtIDw9ayAKICAgICAgICAgICAgLy8yLiAgcG9zc2liaWxpdHkgLT4gc3VtPT0wIG9yIHRoZSBzdW0hPTAKICAgICAgICAgICAgaWYoc3VtPD1rICAmJiAgc3VtIT0wKSAvLyBzbyB3aGVuIHN1bTw9ayBhbmQgc3VtIT0wIHdlIGhhdmUgZ28gb3VyIHN1YmFycmF5cyAKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY250ID0gY250ICsgKGotaSsxKTsgLy8gYWdhaW4ga2VlcCBvbiBjb3VudGluZyB0aGUgc3ViYXJyYXlzIAoKICAgICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKHN1bT09MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY291dDw8Y250PDwiICI7Cn0K