#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
pair<int, int> findZeroSumSubarrayWithMostRepeatedElement(const vector<int>& arr) {
unordered_map<int, int> prefixSumMap; // Maps prefix sum to index
unordered_map<int, int> globalFreq; // Tracks global element frequency
int prefixSum = 0, maxFreq = 0, mostRepeatedElement = arr[0];
prefixSumMap[0] = -1; // Handles cases where subarray starts at index 0
for (int i = 0; i < arr.size(); i++) {
prefixSum += arr[i];
if (prefixSumMap.find(prefixSum) != prefixSumMap.end()) {
int startIdx = prefixSumMap[prefixSum] + 1;
// Update frequency for the elements in the new valid subarray
for (int j = startIdx; j <= i; j++) {
globalFreq[arr[j]]++;
if (globalFreq[arr[j]] > maxFreq) {
maxFreq = globalFreq[arr[j]];
mostRepeatedElement = arr[j];
}
}
} else {
prefixSumMap[prefixSum] = i;
}
}
return {mostRepeatedElement, maxFreq};
}
int main() {
vector<int> arr = {1, 1, -1, 0, 0, 1, 0, -1, -1, -1, 0, 1, 0, 0, 1, 1, 0, 0, -1, -1};
auto [mostRepeatedElement, mostRepeatedCount] = findZeroSumSubarrayWithMostRepeatedElement(arr);
cout << "Most Repeated Element in Zero-Sum Subarray: " << mostRepeatedElement
<< " (Repeated " << mostRepeatedCount << " times)" << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpwYWlyPGludCwgaW50PiBmaW5kWmVyb1N1bVN1YmFycmF5V2l0aE1vc3RSZXBlYXRlZEVsZW1lbnQoY29uc3QgdmVjdG9yPGludD4mIGFycikgewogICAgdW5vcmRlcmVkX21hcDxpbnQsIGludD4gcHJlZml4U3VtTWFwOyAvLyBNYXBzIHByZWZpeCBzdW0gdG8gaW5kZXgKICAgIHVub3JkZXJlZF9tYXA8aW50LCBpbnQ+IGdsb2JhbEZyZXE7ICAvLyBUcmFja3MgZ2xvYmFsIGVsZW1lbnQgZnJlcXVlbmN5CiAgICBpbnQgcHJlZml4U3VtID0gMCwgbWF4RnJlcSA9IDAsIG1vc3RSZXBlYXRlZEVsZW1lbnQgPSBhcnJbMF07CiAgICAKICAgIHByZWZpeFN1bU1hcFswXSA9IC0xOyAvLyBIYW5kbGVzIGNhc2VzIHdoZXJlIHN1YmFycmF5IHN0YXJ0cyBhdCBpbmRleCAwCiAgICAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyLnNpemUoKTsgaSsrKSB7CiAgICAgICAgcHJlZml4U3VtICs9IGFycltpXTsKCiAgICAgICAgaWYgKHByZWZpeFN1bU1hcC5maW5kKHByZWZpeFN1bSkgIT0gcHJlZml4U3VtTWFwLmVuZCgpKSB7CiAgICAgICAgICAgIGludCBzdGFydElkeCA9IHByZWZpeFN1bU1hcFtwcmVmaXhTdW1dICsgMTsKCiAgICAgICAgICAgIC8vIFVwZGF0ZSBmcmVxdWVuY3kgZm9yIHRoZSBlbGVtZW50cyBpbiB0aGUgbmV3IHZhbGlkIHN1YmFycmF5CiAgICAgICAgICAgIGZvciAoaW50IGogPSBzdGFydElkeDsgaiA8PSBpOyBqKyspIHsKICAgICAgICAgICAgICAgIGdsb2JhbEZyZXFbYXJyW2pdXSsrOwogICAgICAgICAgICAgICAgaWYgKGdsb2JhbEZyZXFbYXJyW2pdXSA+IG1heEZyZXEpIHsKICAgICAgICAgICAgICAgICAgICBtYXhGcmVxID0gZ2xvYmFsRnJlcVthcnJbal1dOwogICAgICAgICAgICAgICAgICAgIG1vc3RSZXBlYXRlZEVsZW1lbnQgPSBhcnJbal07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcmVmaXhTdW1NYXBbcHJlZml4U3VtXSA9IGk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiB7bW9zdFJlcGVhdGVkRWxlbWVudCwgbWF4RnJlcX07Cn0KCmludCBtYWluKCkgewogICAgdmVjdG9yPGludD4gYXJyID0gezEsIDEsIC0xLCAwLCAwLCAxLCAwLCAtMSwgLTEsIC0xLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAtMSwgLTF9OwoKICAgIGF1dG8gW21vc3RSZXBlYXRlZEVsZW1lbnQsIG1vc3RSZXBlYXRlZENvdW50XSA9IGZpbmRaZXJvU3VtU3ViYXJyYXlXaXRoTW9zdFJlcGVhdGVkRWxlbWVudChhcnIpOwoKICAgIGNvdXQgPDwgIk1vc3QgUmVwZWF0ZWQgRWxlbWVudCBpbiBaZXJvLVN1bSBTdWJhcnJheTogIiA8PCBtb3N0UmVwZWF0ZWRFbGVtZW50IAogICAgICAgICA8PCAiIChSZXBlYXRlZCAiIDw8IG1vc3RSZXBlYXRlZENvdW50IDw8ICIgdGltZXMpIiA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9