#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[]= {10,5,2,7,1,9};
int n=sizeof(arr)/sizeof(arr[0]);
int k=15;
int currSum=0;
int maxLength=INT_MIN;
map<int, int> pSum;
pSum[0] = -1; //indicates that pSum=0 exists at index i-1 bcoz we need pSum(i-1)
//and what if i is 0 i.e. valid subarray starts from index 0 itself
for(int j=0;j<n;j++){
currSum+=arr[j];
int toFind=currSum-k;
if(pSum.find(toFind)!=pSum.end()){
int index=pSum[toFind];
maxLength=max(maxLength, j-index);
}
if(pSum.find(currSum)==pSum.end()){
pSum[currSum]=j;
}
}
cout<<maxLength;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCWludCBhcnJbXT0gezEwLDUsMiw3LDEsOX07CglpbnQgbj1zaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKTsKCWludCBrPTE1OwoJaW50IGN1cnJTdW09MDsKCWludCBtYXhMZW5ndGg9SU5UX01JTjsKCW1hcDxpbnQsIGludD4gcFN1bTsKcFN1bVswXSA9IC0xOyAgICAvL2luZGljYXRlcyB0aGF0IHBTdW09MCBleGlzdHMgYXQgaW5kZXggaS0xIGJjb3ogd2UgbmVlZCBwU3VtKGktMSkKCQkgICAvL2FuZCB3aGF0IGlmIGkgaXMgMCBpLmUuIHZhbGlkIHN1YmFycmF5IHN0YXJ0cyBmcm9tIGluZGV4IDAgaXRzZWxmCglmb3IoaW50IGo9MDtqPG47aisrKXsKCQljdXJyU3VtKz1hcnJbal07CgkJaW50IHRvRmluZD1jdXJyU3VtLWs7CgkJaWYocFN1bS5maW5kKHRvRmluZCkhPXBTdW0uZW5kKCkpewoJCQlpbnQgaW5kZXg9cFN1bVt0b0ZpbmRdOwoJCQltYXhMZW5ndGg9bWF4KG1heExlbmd0aCwgai1pbmRleCk7CgkJfQoJCWlmKHBTdW0uZmluZChjdXJyU3VtKT09cFN1bS5lbmQoKSl7CgkJCXBTdW1bY3VyclN1bV09ajsKCQl9Cgl9Cgljb3V0PDxtYXhMZW5ndGg7CglyZXR1cm4gMDsKfQo=