#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;
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];
longest = max(longest, len);
}
// Shortest subarray
if(last.find(ques) != last.end()) {
int len = i - last[ques];
shortest = min(shortest, len);
}
// 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 << "Shortest Length = " << shortest << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPGNsaW1pdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCiAgICB2ZWN0b3I8aW50PiBhID0gezIsNyw0LDgsOSwxLDZ9OwogICAgaW50IGsgPSA5OwoKICAgIHVub3JkZXJlZF9tYXA8aW50LGludD4gZmlyc3Q7CiAgICB1bm9yZGVyZWRfbWFwPGludCxpbnQ+IGxhc3Q7CgogICAgZmlyc3RbMF0gPSAtMTsKICAgIGxhc3RbMF0gPSAtMTsKCiAgICBpbnQgc3VtID0gMDsKICAgIGludCBsb25nZXN0ID0gSU5UX01JTjsKICAgIGludCBzaG9ydGVzdCA9IElOVF9NQVg7CgogICAgZm9yKGludCBpID0gMDsgaSA8IGEuc2l6ZSgpOyBpKyspIHsKCiAgICAgICAgc3VtICs9IGFbaV07CiAgICAgICAgaW50IHF1ZXMgPSBzdW0gLSBrOwoKICAgICAgICAvLyBMb25nZXN0IHN1YmFycmF5CiAgICAgICAgaWYoZmlyc3QuZmluZChxdWVzKSAhPSBmaXJzdC5lbmQoKSkgewogICAgICAgICAgICBpbnQgbGVuID0gaSAtIGZpcnN0W3F1ZXNdOwogICAgICAgICAgICBsb25nZXN0ID0gbWF4KGxvbmdlc3QsIGxlbik7CiAgICAgICAgfQoKICAgICAgICAvLyBTaG9ydGVzdCBzdWJhcnJheQogICAgICAgIGlmKGxhc3QuZmluZChxdWVzKSAhPSBsYXN0LmVuZCgpKSB7CiAgICAgICAgICAgIGludCBsZW4gPSBpIC0gbGFzdFtxdWVzXTsKICAgICAgICAgICAgc2hvcnRlc3QgPSBtaW4oc2hvcnRlc3QsIGxlbik7CiAgICAgICAgfQoKICAgICAgICAvLyBTdG9yZSBmaXJzdCBvY2N1cnJlbmNlCiAgICAgICAgaWYoZmlyc3QuZmluZChzdW0pID09IGZpcnN0LmVuZCgpKQogICAgICAgICAgICBmaXJzdFtzdW1dID0gaTsKCiAgICAgICAgLy8gU3RvcmUgbGFzdCBvY2N1cnJlbmNlCiAgICAgICAgbGFzdFtzdW1dID0gaTsKICAgIH0KCiAgICBpZihsb25nZXN0ID09IElOVF9NSU4pCiAgICAgICAgY291dCA8PCAiTm8gc3ViYXJyYXkgZm91bmQiOwogICAgZWxzZSB7CiAgICAgICAgY291dCA8PCAiTG9uZ2VzdCBMZW5ndGggPSAiIDw8IGxvbmdlc3QgPDwgZW5kbDsKICAgICAgICBjb3V0IDw8ICJTaG9ydGVzdCBMZW5ndGggPSAiIDw8IHNob3J0ZXN0IDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=