#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;
}