#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
int smallestSubarray(vector<int>arr,int k)
{
unordered_map<int,int>mp;
mp[0]=-1;
int prefixsum=0;
int n=arr.size();
int length=INT_MAX;
for(int i=0;i<n;i++)
{
prefixsum=prefixsum+arr[i];
if(mp.find(prefixsum-k)!=mp.end())
{
int current_len=i-mp[prefixsum-k];
length=min(current_len,length);
}
mp[prefixsum]=i;
}
return length;
}
int longestSubarray(vector<int>arr,int k)
{
unordered_map<int,int>map;
map[0]=-1;
int prefixsum=0;
int n=arr.size();
int length=INT_MIN;
for(int i=0;i<n;i++)
{
prefixsum=prefixsum+arr[i];
if(map.find(prefixsum-k)!=map.end())
{
int current_len=i-map[prefixsum-k];
length=max(current_len,length);
}
if(map.find(prefixsum)==map.end())
{
map[prefixsum]=i;
}
}
return length;
}
int countShortestSubarray(vector<int>arr,int k,int target)
{
unordered_map<int,int>mp;
mp[0]=-1;
int prefixsum=0;
int n=arr.size();
int count=0;
int length,current_length;
for(int i=0;i<n;i++)
{
prefixsum=prefixsum+arr[i];
if(mp.find(prefixsum-k)!=mp.end())
{
current_length = i-mp[prefixsum-k];
if(current_length==target)
count++;
}
mp[prefixsum]=i;
}
return count;
}
int countLongestSubarray(vector<int>arr,int k,int target)
{
unordered_map<int,int>mp;
mp[0]=-1;
int prefixsum=0;
int n=arr.size();
int count=0;
int length,current_length;
for(int i=0;i<n;i++)
{
prefixsum=prefixsum+arr[i];
if(mp.find(prefixsum-k)!=mp.end())
{
current_length = i-mp[prefixsum-k];
if(current_length==target)
count++;
}
if(mp.find(prefixsum)==mp.end())
mp[prefixsum]=i;
}
return count;
}
int main() {
vector<int>arr={2,6,4,4,0,1,6,1};
int k;
cin>>k;
int smallest_length = smallestSubarray(arr,k);
int largest_length = longestSubarray(arr,k);
cout<<smallest_length<<endl;
cout<<largest_length<<endl;
cout<<countShortestSubarray(arr,k,smallest_length);
cout<<endl;
cout<<countLongestSubarray(arr,k,largest_length);
// cout<<smallestSubarray(arr,k);
// cout<<endl;
// cout<<longestSubarray(arr,k);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGludCBsbDsKCgppbnQgc21hbGxlc3RTdWJhcnJheSh2ZWN0b3I8aW50PmFycixpbnQgaykKIHsKIAl1bm9yZGVyZWRfbWFwPGludCxpbnQ+bXA7CiAJbXBbMF09LTE7CiAgICBpbnQgcHJlZml4c3VtPTA7CiAgICBpbnQgbj1hcnIuc2l6ZSgpOwogICAgaW50ICBsZW5ndGg9SU5UX01BWDsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICAgewogICAgIAlwcmVmaXhzdW09cHJlZml4c3VtK2FycltpXTsKICAgICAJaWYobXAuZmluZChwcmVmaXhzdW0taykhPW1wLmVuZCgpKQogICAgIAkgewogICAgIAkgCWludCBjdXJyZW50X2xlbj1pLW1wW3ByZWZpeHN1bS1rXTsKICAgICAJIAlsZW5ndGg9bWluKGN1cnJlbnRfbGVuLGxlbmd0aCk7CiAgICAgCSB9CiAgICAgCSBtcFtwcmVmaXhzdW1dPWk7CiAgICAgfQogICAgIHJldHVybiBsZW5ndGg7CiB9CgoKaW50IGxvbmdlc3RTdWJhcnJheSh2ZWN0b3I8aW50PmFycixpbnQgaykKIHsKIAl1bm9yZGVyZWRfbWFwPGludCxpbnQ+bWFwOwogCW1hcFswXT0tMTsKICAgIGludCBwcmVmaXhzdW09MDsKICAgIGludCBuPWFyci5zaXplKCk7CiAgICBpbnQgIGxlbmd0aD1JTlRfTUlOOwogICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgICB7CiAgICAgCXByZWZpeHN1bT1wcmVmaXhzdW0rYXJyW2ldOwogICAgIAlpZihtYXAuZmluZChwcmVmaXhzdW0taykhPW1hcC5lbmQoKSkKICAgICAJIHsKICAgICAJIAlpbnQgY3VycmVudF9sZW49aS1tYXBbcHJlZml4c3VtLWtdOwogICAgIAkgCWxlbmd0aD1tYXgoY3VycmVudF9sZW4sbGVuZ3RoKTsKICAgICAJIH0KICAgICAJIGlmKG1hcC5maW5kKHByZWZpeHN1bSk9PW1hcC5lbmQoKSkKICAgICAJICAgICB7CiAgICAgCSAgICAgCW1hcFtwcmVmaXhzdW1dPWk7CiAgICAgCSAgICAgfQogICAgIH0gCSAgICAgCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KCmludCBjb3VudFNob3J0ZXN0U3ViYXJyYXkodmVjdG9yPGludD5hcnIsaW50IGssaW50IHRhcmdldCkKewoJdW5vcmRlcmVkX21hcDxpbnQsaW50Pm1wOwogCW1wWzBdPS0xOwogICAgaW50IHByZWZpeHN1bT0wOwogICAgaW50IG49YXJyLnNpemUoKTsKICAgIGludCBjb3VudD0wOwogICAgaW50IGxlbmd0aCxjdXJyZW50X2xlbmd0aDsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICAgewogICAgIAlwcmVmaXhzdW09cHJlZml4c3VtK2FycltpXTsKICAgICAJaWYobXAuZmluZChwcmVmaXhzdW0taykhPW1wLmVuZCgpKQogICAgIAkgewogICAgIAkgICAgY3VycmVudF9sZW5ndGggPSBpLW1wW3ByZWZpeHN1bS1rXTsKICAgICAJICAgIGlmKGN1cnJlbnRfbGVuZ3RoPT10YXJnZXQpCiAgICAgCSAgICAgY291bnQrKzsKICAgICAJIH0KICAgICAJIAogICAgIAkgbXBbcHJlZml4c3VtXT1pOwogICAgIH0KICAgICByZXR1cm4gY291bnQ7Cn0KCmludCBjb3VudExvbmdlc3RTdWJhcnJheSh2ZWN0b3I8aW50PmFycixpbnQgayxpbnQgdGFyZ2V0KQp7Cgl1bm9yZGVyZWRfbWFwPGludCxpbnQ+bXA7CiAJbXBbMF09LTE7CiAgICBpbnQgcHJlZml4c3VtPTA7CiAgICBpbnQgbj1hcnIuc2l6ZSgpOwogICAgaW50IGNvdW50PTA7CiAgICBpbnQgbGVuZ3RoLGN1cnJlbnRfbGVuZ3RoOwogICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgICB7CiAgICAgCXByZWZpeHN1bT1wcmVmaXhzdW0rYXJyW2ldOwogICAgIAlpZihtcC5maW5kKHByZWZpeHN1bS1rKSE9bXAuZW5kKCkpCiAgICAgCSB7CiAgICAgCSAgICBjdXJyZW50X2xlbmd0aCA9IGktbXBbcHJlZml4c3VtLWtdOwogICAgIAkgICAgaWYoY3VycmVudF9sZW5ndGg9PXRhcmdldCkKICAgICAJICAgICBjb3VudCsrOwogICAgIAkgfQogICAgIAkgaWYobXAuZmluZChwcmVmaXhzdW0pPT1tcC5lbmQoKSkKICAgICAJIG1wW3ByZWZpeHN1bV09aTsKICAgICB9CiAgICAgcmV0dXJuIGNvdW50Owp9CgoKaW50IG1haW4oKSB7CiAgIHZlY3RvcjxpbnQ+YXJyPXsyLDYsNCw0LDAsMSw2LDF9OwoJaW50IGs7CgljaW4+Pms7CgkKCWludCBzbWFsbGVzdF9sZW5ndGggPSBzbWFsbGVzdFN1YmFycmF5KGFycixrKTsKCWludCBsYXJnZXN0X2xlbmd0aCA9IGxvbmdlc3RTdWJhcnJheShhcnIsayk7CgkKICBjb3V0PDxzbWFsbGVzdF9sZW5ndGg8PGVuZGw7CiAgY291dDw8bGFyZ2VzdF9sZW5ndGg8PGVuZGw7CgkKCWNvdXQ8PGNvdW50U2hvcnRlc3RTdWJhcnJheShhcnIsayxzbWFsbGVzdF9sZW5ndGgpOwoJY291dDw8ZW5kbDsKCWNvdXQ8PGNvdW50TG9uZ2VzdFN1YmFycmF5KGFycixrLGxhcmdlc3RfbGVuZ3RoKTsKCQoJCgkKCQoJCgkKCS8vIGNvdXQ8PHNtYWxsZXN0U3ViYXJyYXkoYXJyLGspOwogLy8gICBjb3V0PDxlbmRsOwogLy8gICBjb3V0PDxsb25nZXN0U3ViYXJyYXkoYXJyLGspOwogICAgCiAgICAKCgkKfQk=