#include<iostream>
#include<unordered_map>
using namespace std;
int longestSubarrayWithSumZero(int arr[],int n,int k){
unordered_map<int,int>m;
int pre = 0;
int len = 0;
for(int i=0;i<n;i++){
pre+=arr[i];
if(pre == k){
len = max(len,i+1);
}
if(m.find(pre-k)!= m.end()){
len = max(len,(i-m[pre-k]));
}
else{
m[pre]= i;
}
}
return len;
}
int main(){
int arr[] = {1,-1,5,-2,3};
int n = sizeof(arr)/sizeof(int);
int k = 3;
int ans = longestSubarrayWithSumZero(arr,n,k);
cout<<ans;
return 0;}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHVub3JkZXJlZF9tYXA+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBsb25nZXN0U3ViYXJyYXlXaXRoU3VtWmVybyhpbnQgYXJyW10saW50IG4saW50IGspewogICAgdW5vcmRlcmVkX21hcDxpbnQsaW50Pm07CiAgICBpbnQgcHJlID0gMDsKICAgIGludCBsZW4gPSAwOwogICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgcHJlKz1hcnJbaV07CiAgICAgICAgaWYocHJlID09IGspewogICAgICAgICAgICBsZW4gPSBtYXgobGVuLGkrMSk7CiAgICAgICAgfQogICAgICAgIGlmKG0uZmluZChwcmUtaykhPSBtLmVuZCgpKXsKICAgICAgICAgICAgbGVuID0gbWF4KGxlbiwoaS1tW3ByZS1rXSkpOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBtW3ByZV09IGk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGxlbjsKfQppbnQgbWFpbigpewogICAgaW50IGFycltdID0gezEsLTEsNSwtMiwzfTsKICAgIGludCBuID0gc2l6ZW9mKGFycikvc2l6ZW9mKGludCk7CiAgICBpbnQgayA9IDM7CiAgICBpbnQgYW5zID0gbG9uZ2VzdFN1YmFycmF5V2l0aFN1bVplcm8oYXJyLG4sayk7CiAgICBjb3V0PDxhbnM7CnJldHVybiAwO30KCgo=