3
MajorityChecker(vector<int> &arr) {9
val_idx = vector<int>(20001, -1);10
for (auto it = cnt.begin(); it != cnt.end(); ++it) {11
if (it->second >= 250) {12
val_idx[it->first] = elems.size();13
elems.push_back(it->first);17
pre = vector<vector<int>>(n, vector<int>(arr.size(), 0));18
if (val_idx[arr[0]] != -1) pre[val_idx[arr[0]]][0]++;19
for (int i = 1; i < arr.size(); ++i) {20
for (int j = 0; j < n; ++j) {21
pre[j][i] = pre[j][i - 1];23
if (val_idx[arr[i]] != -1) pre[val_idx[arr[i]]][i]++;27
int query(int left, int right, int threshold) {28
int width = right - left + 1;31
int most_frequent = 0;32
int most_frequent_val;33
while (left <= right) {34
if (++cnt[arr[left++]] > most_frequent) {35
most_frequent = cnt[arr[left - 1]];36
most_frequent_val = arr[left - 1];38
// early end condition, there are not enough elements left39
if (right + most_frequent + 1 < threshold + left) return -1;41
return most_frequent >= threshold ? most_frequent_val : -1;44
for (int i = 0; i < n; ++i) {45
if (pre[i][right] - (left - 1 >= 0 ? pre[i][left - 1] : 0) >= threshold) {57
vector<vector<int>> pre;