#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;
//subarray with sum==k
unordered_map<int,int> ok;
int sum=0,count=0;
int k=-10;
vector<int> arr={10,-2,2,-20 ,10}; // 10 8 10 -10 0
ok[0]=1;
for(int i=0;i<arr.size();i++){
sum+=arr[i];
if(ok.find(sum-k)!=ok.end()){
count+=ok[sum-k];
}
ok[sum]++;
}
cout<<count;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCS8vIGxvbmdlc3QgY29tbW9uIHNlcXVlbmNlCgkvLyB2ZWN0b3I8aW50PiBhcnI9ezAsMyw3LDIsNSw4LDQsNiwwLDF9OwoJLy8gdW5vcmRlcmVkX21hcDxpbnQsYm9vbD4gb2ssIGNoZWNrOwoJLy8gZm9yKGludCBpPTA7aTxhcnIuc2l6ZSgpO2krKyl7CgkvLyAJb2tbYXJyW2ldXT10cnVlOwoJLy8gfQoJLy8gaW50IGs9MDsKCS8vIGZvcihpbnQgaT0wO2k8YXJyLnNpemUoKTtpKyspewoJLy8gCWlmKG9rLmZpbmQoYXJyW2ldLTEpPT1vay5lbmQoKSAmJiBva1thcnJbaV1dPT10cnVlKXsKCS8vIAlpbnQgdD1hcnJbaV07CgkvLyAJaW50IGNvdW50PTA7CgkvLyAJd2hpbGUob2tbdF0pewoJLy8gCQkJY291bnQrKzsKCS8vIAkJCW9rW3RdPWZhbHNlOwoJLy8gCQkJdD10KzE7CgkvLyAJfQoJCQoJLy8gCWs9bWF4KGNvdW50LGspOwoJLy8gCX0KCS8vIH0KCS8vIGNvdXQ8PGs7CgkKCQoJLy9sb25nZXN0IHN1YmFycnkgd2l0aCBzdW09MAoJLyogd2Ugd2lsbCBmaXJzdCBjYWxjdWxhdGUgdGhlIHByZWZpeCBzdW0gYW5kIGZpbmQgdGhlIG1heCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBzYW1lIGVsZW1lbnQKCSovCgkvLyB2ZWN0b3I8aW50PiBhcnI9ezEsMCwzfTsKCS8vIHVub3JkZXJlZF9tYXA8aW50LGludD4gb2s7CgkvLyBpbnQgbj1hcnIuc2l6ZSgpOwoJLy8gdmVjdG9yPGludD4gcHJlKG4rMSwwKTsKCS8vIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKCS8vIAlwcmVbaV09cHJlW2ktMV0rYXJyW2ktMV07CgkvLyB9CgkvLyBpbnQgY291bnQ9MDsKCS8vIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKCS8vIAlpZihvay5maW5kKHByZVtpXSk9PW9rLmVuZCgpKXsKCS8vIAkJb2tbcHJlW2ldXT1pOwoJLy8gCX1lbHNlewoJLy8gCQljb3VudD1tYXgoY291bnQsaS1va1twcmVbaV1dKTsKCS8vIAl9CgkvLyB9CgkvLyBjb3V0PDxjb3VudDsKCQoJLy9zdWJhcnJheSB3aXRoIHN1bT09awoJdW5vcmRlcmVkX21hcDxpbnQsaW50PiBvazsKCWludCBzdW09MCxjb3VudD0wOwoJaW50IGs9LTEwOwoJdmVjdG9yPGludD4gYXJyPXsxMCwtMiwyLC0yMCAsMTB9OyAvLyAgIDEwIDggMTAgLTEwIDAKCW9rWzBdPTE7Cglmb3IoaW50IGk9MDtpPGFyci5zaXplKCk7aSsrKXsKCQlzdW0rPWFycltpXTsKCQlpZihvay5maW5kKHN1bS1rKSE9b2suZW5kKCkpewoJCQljb3VudCs9b2tbc3VtLWtdOwoJCX0KCQlva1tzdW1dKys7Cgl9Cgljb3V0PDxjb3VudDsKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoJCglyZXR1cm4gMDsKfQ==