#include <bits/stdc++.h>
using namespace std;
pair<int,int>getMaxMin(const vector<int>&arr,int n,int k){
unordered_map<int,int>max;
unordered_map<int,int>min;
max[0]=0;
int sum=0;
int maxi=0;
int mini=1e9;
for(int i=1;i<=n;i++){
sum+=arr[i-1];
int x=sum-k;
if(max.find(x)!=max.end()){
int dist=max[x]+1;
int maxD=i-dist+1;
if(maxD>maxi){
maxi=maxD;
}
}
if(max.find(x)!=max.end()){
int dist=max[x]+1;
int minD=i-dist+1;
if(minD<mini){
mini=minD;
}
}
if(max.find(x)==max.end()){
max[sum]=i;
}
min[sum]=i;
}
return {maxi,mini};
}
int getMmcount(const vector<int>&arr,int n,int k,int getCount){
int count=0;
int sum=0;
if(getCount==0){
return 0;
}
for(int i=0;i<getCount;i++){
sum+=arr[i];
}
if(sum==k){
count++;
}
for(int i=getCount;i<n;i++){
sum+=arr[i]-arr[i-getCount];
if(sum==k){
count++;
}
}
return count;
}
int main() {
// your code goes here
vector<int>arr={1,2,3,4,5,-1,6};
int k=9;
int n=arr.size();
auto[maxL,minL]=getMaxMin(arr,n,k);
int MCount=getMmcount(arr,n,k,maxL);
int mCount=getMmcount(arr,n,k,minL);
cout<<"The maximum length is: "<<maxL<<" and its count:"<<MCount<<endl;
cout<<"The minimum length is: "<<minL<<" and its count:"<<mCount<<endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnBhaXI8aW50LGludD5nZXRNYXhNaW4oY29uc3QgdmVjdG9yPGludD4mYXJyLGludCBuLGludCBrKXsKCXVub3JkZXJlZF9tYXA8aW50LGludD5tYXg7Cgl1bm9yZGVyZWRfbWFwPGludCxpbnQ+bWluOwoJbWF4WzBdPTA7CglpbnQgc3VtPTA7CglpbnQgbWF4aT0wOwoJaW50IG1pbmk9MWU5OwoJZm9yKGludCBpPTE7aTw9bjtpKyspewoJCXN1bSs9YXJyW2ktMV07CgkJaW50IHg9c3VtLWs7CgkJaWYobWF4LmZpbmQoeCkhPW1heC5lbmQoKSl7CgkJCWludCBkaXN0PW1heFt4XSsxOwoJCQlpbnQgbWF4RD1pLWRpc3QrMTsKCQkJaWYobWF4RD5tYXhpKXsKCQkJCW1heGk9bWF4RDsKCQkJfQoJCX0KCQlpZihtYXguZmluZCh4KSE9bWF4LmVuZCgpKXsKCQkJaW50IGRpc3Q9bWF4W3hdKzE7CgkJCWludCBtaW5EPWktZGlzdCsxOwoJCQlpZihtaW5EPG1pbmkpewoJCQkJbWluaT1taW5EOwoJCQl9CgkJfQoJCWlmKG1heC5maW5kKHgpPT1tYXguZW5kKCkpewoJCQltYXhbc3VtXT1pOwoJCX0KCQltaW5bc3VtXT1pOwoJfQoJcmV0dXJuIHttYXhpLG1pbml9OwogCn0KaW50IGdldE1tY291bnQoY29uc3QgdmVjdG9yPGludD4mYXJyLGludCBuLGludCBrLGludCBnZXRDb3VudCl7CglpbnQgY291bnQ9MDsKCWludCBzdW09MDsKCWlmKGdldENvdW50PT0wKXsKCQlyZXR1cm4gMDsKCX0KCWZvcihpbnQgaT0wO2k8Z2V0Q291bnQ7aSsrKXsKCQlzdW0rPWFycltpXTsKCX0KCWlmKHN1bT09ayl7CgkJY291bnQrKzsKCX0KCWZvcihpbnQgaT1nZXRDb3VudDtpPG47aSsrKXsKCQlzdW0rPWFycltpXS1hcnJbaS1nZXRDb3VudF07CgkJaWYoc3VtPT1rKXsKCQkJY291bnQrKzsKCQl9Cgl9CglyZXR1cm4gY291bnQ7CiAKIAp9CiAKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCgl2ZWN0b3I8aW50PmFycj17MSwyLDMsNCw1LC0xLDZ9OwoJaW50IGs9OTsKCWludCBuPWFyci5zaXplKCk7CglhdXRvW21heEwsbWluTF09Z2V0TWF4TWluKGFycixuLGspOwoJaW50IE1Db3VudD1nZXRNbWNvdW50KGFycixuLGssbWF4TCk7CglpbnQgbUNvdW50PWdldE1tY291bnQoYXJyLG4sayxtaW5MKTsKIAoJY291dDw8IlRoZSBtYXhpbXVtIGxlbmd0aCBpczogIjw8bWF4TDw8IiBhbmQgaXRzIGNvdW50OiI8PE1Db3VudDw8ZW5kbDsKCWNvdXQ8PCJUaGUgbWluaW11bSBsZW5ndGggaXM6ICI8PG1pbkw8PCIgYW5kIGl0cyBjb3VudDoiPDxtQ291bnQ8PGVuZGw7CiAKIAoJcmV0dXJuIDA7Cn0=