#include <iostream>
#include <vector>
#include <unordered_map>
#include <climits>
using namespace std;
int main() {
vector<int> a = {2,7,4,8,9,1,6};
int k = 9;
unordered_map<int,int> first;
unordered_map<int,int> last;
first[0] = -1;
last[0] = -1;
int sum = 0;
int longest = INT_MIN;
int shortest = INT_MAX;
int maxCount = 0;
int minCount = 0;
for(int i = 0; i < a.size(); i++) {
sum += a[i];
int ques = sum - k;
// Longest Subarray
if(first.find(ques) != first.end()) {
int len = i - first[ques];
if(len > longest) {
longest = len;
maxCount = 1;
}
else if(len == longest) {
maxCount++;
}
}
// Shortest Subarray
if(last.find(ques) != last.end()) {
int len = i - last[ques];
if(len < shortest) {
shortest = len;
minCount = 1;
}
else if(len == shortest) {
minCount++;
}
}
// Store first occurrence
if(first.find(sum) == first.end())
first[sum] = i;
// Store last occurrence
last[sum] = i;
}
if(longest == INT_MIN) {
cout << "No subarray found";
}
else {
cout << "Longest Length = " << longest << endl;
cout << "Number of Longest Subarrays = " << maxCount << endl;
cout << "Shortest Length = " << shortest << endl;
cout << "Number of Shortest Subarrays = " << minCount << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPGNsaW1pdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCiAgICB2ZWN0b3I8aW50PiBhID0gezIsNyw0LDgsOSwxLDZ9OwogICAgaW50IGsgPSA5OwoKICAgIHVub3JkZXJlZF9tYXA8aW50LGludD4gZmlyc3Q7CiAgICB1bm9yZGVyZWRfbWFwPGludCxpbnQ+IGxhc3Q7CgogICAgZmlyc3RbMF0gPSAtMTsKICAgIGxhc3RbMF0gPSAtMTsKCiAgICBpbnQgc3VtID0gMDsKCiAgICBpbnQgbG9uZ2VzdCA9IElOVF9NSU47CiAgICBpbnQgc2hvcnRlc3QgPSBJTlRfTUFYOwoKICAgIGludCBtYXhDb3VudCA9IDA7CiAgICBpbnQgbWluQ291bnQgPSAwOwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhLnNpemUoKTsgaSsrKSB7CgogICAgICAgIHN1bSArPSBhW2ldOwogICAgICAgIGludCBxdWVzID0gc3VtIC0gazsKCiAgICAgICAgLy8gTG9uZ2VzdCBTdWJhcnJheQogICAgICAgIGlmKGZpcnN0LmZpbmQocXVlcykgIT0gZmlyc3QuZW5kKCkpIHsKCiAgICAgICAgICAgIGludCBsZW4gPSBpIC0gZmlyc3RbcXVlc107CgogICAgICAgICAgICBpZihsZW4gPiBsb25nZXN0KSB7CiAgICAgICAgICAgICAgICBsb25nZXN0ID0gbGVuOwogICAgICAgICAgICAgICAgbWF4Q291bnQgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYobGVuID09IGxvbmdlc3QpIHsKICAgICAgICAgICAgICAgIG1heENvdW50Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFNob3J0ZXN0IFN1YmFycmF5CiAgICAgICAgaWYobGFzdC5maW5kKHF1ZXMpICE9IGxhc3QuZW5kKCkpIHsKCiAgICAgICAgICAgIGludCBsZW4gPSBpIC0gbGFzdFtxdWVzXTsKCiAgICAgICAgICAgIGlmKGxlbiA8IHNob3J0ZXN0KSB7CiAgICAgICAgICAgICAgICBzaG9ydGVzdCA9IGxlbjsKICAgICAgICAgICAgICAgIG1pbkNvdW50ID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKGxlbiA9PSBzaG9ydGVzdCkgewogICAgICAgICAgICAgICAgbWluQ291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU3RvcmUgZmlyc3Qgb2NjdXJyZW5jZQogICAgICAgIGlmKGZpcnN0LmZpbmQoc3VtKSA9PSBmaXJzdC5lbmQoKSkKICAgICAgICAgICAgZmlyc3Rbc3VtXSA9IGk7CgogICAgICAgIC8vIFN0b3JlIGxhc3Qgb2NjdXJyZW5jZQogICAgICAgIGxhc3Rbc3VtXSA9IGk7CiAgICB9CgogICAgaWYobG9uZ2VzdCA9PSBJTlRfTUlOKSB7CiAgICAgICAgY291dCA8PCAiTm8gc3ViYXJyYXkgZm91bmQiOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgY291dCA8PCAiTG9uZ2VzdCBMZW5ndGggPSAiIDw8IGxvbmdlc3QgPDwgZW5kbDsKICAgICAgICBjb3V0IDw8ICJOdW1iZXIgb2YgTG9uZ2VzdCBTdWJhcnJheXMgPSAiIDw8IG1heENvdW50IDw8IGVuZGw7CgogICAgICAgIGNvdXQgPDwgIlNob3J0ZXN0IExlbmd0aCA9ICIgPDwgc2hvcnRlc3QgPDwgZW5kbDsKICAgICAgICBjb3V0IDw8ICJOdW1iZXIgb2YgU2hvcnRlc3QgU3ViYXJyYXlzID0gIiA8PCBtaW5Db3VudCA8PCBlbmRsOwogICAgfQoKICAgIHJldHVybiAwOwp9