#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
pair<int, int> findFastestZeroSumSubarrayElement(const vector<int>& arr) {
unordered_map<int, int> prefixSumMap; // Tracks first occurrence of prefix sums
unordered_map<int, int> globalFreq; // Efficient frequency tracking
int prefixSum = 0, maxFreq = 0, mostRepeatedElement = arr[0];
prefixSumMap[0] = -1; // Handles cases where subarray starts from index 0
for (int i = 0; i < arr.size(); i++) {
prefixSum += arr[i];
if (prefixSumMap.find(prefixSum) != prefixSumMap.end()) {
for (int j = prefixSumMap[prefixSum] + 1; j <= i; j++) {
int num = arr[j];
globalFreq[num]++;
if (globalFreq[num] > maxFreq) {
maxFreq = globalFreq[num];
mostRepeatedElement = num;
}
}
} else {
prefixSumMap[prefixSum] = i; // First occurrence of prefixSum
}
}
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] = findFastestZeroSumSubarrayElement(arr);
cout << "Most Repeated Element in Zero-Sum Subarray: " << mostRepeatedElement
<< " (Repeated " << mostRepeatedCount << " times)" << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpwYWlyPGludCwgaW50PiBmaW5kRmFzdGVzdFplcm9TdW1TdWJhcnJheUVsZW1lbnQoY29uc3QgdmVjdG9yPGludD4mIGFycikgewogICAgdW5vcmRlcmVkX21hcDxpbnQsIGludD4gcHJlZml4U3VtTWFwOyAvLyBUcmFja3MgZmlyc3Qgb2NjdXJyZW5jZSBvZiBwcmVmaXggc3VtcwogICAgdW5vcmRlcmVkX21hcDxpbnQsIGludD4gZ2xvYmFsRnJlcTsgIC8vIEVmZmljaWVudCBmcmVxdWVuY3kgdHJhY2tpbmcKICAgIGludCBwcmVmaXhTdW0gPSAwLCBtYXhGcmVxID0gMCwgbW9zdFJlcGVhdGVkRWxlbWVudCA9IGFyclswXTsKCiAgICBwcmVmaXhTdW1NYXBbMF0gPSAtMTsgLy8gSGFuZGxlcyBjYXNlcyB3aGVyZSBzdWJhcnJheSBzdGFydHMgZnJvbSBpbmRleCAwCgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnIuc2l6ZSgpOyBpKyspIHsKICAgICAgICBwcmVmaXhTdW0gKz0gYXJyW2ldOwoKICAgICAgICBpZiAocHJlZml4U3VtTWFwLmZpbmQocHJlZml4U3VtKSAhPSBwcmVmaXhTdW1NYXAuZW5kKCkpIHsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IHByZWZpeFN1bU1hcFtwcmVmaXhTdW1dICsgMTsgaiA8PSBpOyBqKyspIHsKICAgICAgICAgICAgICAgIGludCBudW0gPSBhcnJbal07CiAgICAgICAgICAgICAgICBnbG9iYWxGcmVxW251bV0rKzsKICAgICAgICAgICAgICAgIGlmIChnbG9iYWxGcmVxW251bV0gPiBtYXhGcmVxKSB7CiAgICAgICAgICAgICAgICAgICAgbWF4RnJlcSA9IGdsb2JhbEZyZXFbbnVtXTsKICAgICAgICAgICAgICAgICAgICBtb3N0UmVwZWF0ZWRFbGVtZW50ID0gbnVtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJlZml4U3VtTWFwW3ByZWZpeFN1bV0gPSBpOyAvLyBGaXJzdCBvY2N1cnJlbmNlIG9mIHByZWZpeFN1bQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4ge21vc3RSZXBlYXRlZEVsZW1lbnQsIG1heEZyZXF9Owp9CgppbnQgbWFpbigpIHsKICAgIHZlY3RvcjxpbnQ+IGFyciA9IHsxLCAxLCAtMSwgMCwgMCwgMSwgMCwgLTEsIC0xLCAtMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgLTEsIC0xfTsKCiAgICBhdXRvIFttb3N0UmVwZWF0ZWRFbGVtZW50LCBtb3N0UmVwZWF0ZWRDb3VudF0gPSBmaW5kRmFzdGVzdFplcm9TdW1TdWJhcnJheUVsZW1lbnQoYXJyKTsKCiAgICBjb3V0IDw8ICJNb3N0IFJlcGVhdGVkIEVsZW1lbnQgaW4gWmVyby1TdW0gU3ViYXJyYXk6ICIgPDwgbW9zdFJlcGVhdGVkRWxlbWVudCAKICAgICAgICAgPDwgIiAoUmVwZWF0ZWQgIiA8PCBtb3N0UmVwZWF0ZWRDb3VudCA8PCAiIHRpbWVzKSIgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==