#include <bits/stdc++.h>
using namespace std;
int main() {
// longest common sequence
// vector<int> arr={0,3,7,2,5,8,4,6,0,1};
// unordered_map<int,bool> ok, check;
// for(int i=0;i<arr.size();i++){
// ok[arr[i]]=true;
// }
// int k=0;
// for(int i=0;i<arr.size();i++){
// if(ok.find(arr[i]-1)==ok.end() && ok[arr[i]]==true){
// int t=arr[i];
// int count=0;
// while(ok[t]){
// count++;
// ok[t]=false;
// t=t+1;
// }
// k=max(count,k);
// }
// }
// cout<<k;
//longest subarry with sum=0
/* we will first calculate the prefix sum and find the max distance between the same element
*/
vector<int> arr={1,0,3};
unordered_map<int,int> ok;
int n=arr.size();
vector<int> pre(n+1,0);
for(int i=1;i<=n;i++){
pre[i]=pre[i-1]+arr[i-1];
}
int count=0;
for(int i=1;i<=n;i++){
if(ok.find(pre[i])==ok.end()){
ok[pre[i]]=i;
}else{
count=max(count,i-ok[pre[i]]);
}
}
cout<<count;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCS8vIGxvbmdlc3QgY29tbW9uIHNlcXVlbmNlCgkvLyB2ZWN0b3I8aW50PiBhcnI9ezAsMyw3LDIsNSw4LDQsNiwwLDF9OwoJLy8gdW5vcmRlcmVkX21hcDxpbnQsYm9vbD4gb2ssIGNoZWNrOwoJLy8gZm9yKGludCBpPTA7aTxhcnIuc2l6ZSgpO2krKyl7CgkvLyAJb2tbYXJyW2ldXT10cnVlOwoJLy8gfQoJLy8gaW50IGs9MDsKCS8vIGZvcihpbnQgaT0wO2k8YXJyLnNpemUoKTtpKyspewoJLy8gCWlmKG9rLmZpbmQoYXJyW2ldLTEpPT1vay5lbmQoKSAmJiBva1thcnJbaV1dPT10cnVlKXsKCS8vIAlpbnQgdD1hcnJbaV07CgkvLyAJaW50IGNvdW50PTA7CgkvLyAJd2hpbGUob2tbdF0pewoJLy8gCQkJY291bnQrKzsKCS8vIAkJCW9rW3RdPWZhbHNlOwoJLy8gCQkJdD10KzE7CgkvLyAJfQoJCQoJLy8gCWs9bWF4KGNvdW50LGspOwoJLy8gCX0KCS8vIH0KCS8vIGNvdXQ8PGs7CgkKCQoJLy9sb25nZXN0IHN1YmFycnkgd2l0aCBzdW09MAoJLyogd2Ugd2lsbCBmaXJzdCBjYWxjdWxhdGUgdGhlIHByZWZpeCBzdW0gYW5kIGZpbmQgdGhlIG1heCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBzYW1lIGVsZW1lbnQKCSovCgl2ZWN0b3I8aW50PiBhcnI9ezEsMCwzfTsKCXVub3JkZXJlZF9tYXA8aW50LGludD4gb2s7CglpbnQgbj1hcnIuc2l6ZSgpOwoJdmVjdG9yPGludD4gcHJlKG4rMSwwKTsKCWZvcihpbnQgaT0xO2k8PW47aSsrKXsKCQlwcmVbaV09cHJlW2ktMV0rYXJyW2ktMV07Cgl9CglpbnQgY291bnQ9MDsKCWZvcihpbnQgaT0xO2k8PW47aSsrKXsKCQlpZihvay5maW5kKHByZVtpXSk9PW9rLmVuZCgpKXsKCQkJb2tbcHJlW2ldXT1pOwoJCX1lbHNlewoJCQljb3VudD1tYXgoY291bnQsaS1va1twcmVbaV1dKTsKCQl9Cgl9Cgljb3V0PDxjb3VudDsKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCglyZXR1cm4gMDsKfQ==