Advertisement
nikunjsoni

1157

May 17th, 2021
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.89 KB | None | 0 0
  1. class MajorityChecker {
  2. public:
  3.     vector<int> a;
  4.     unordered_map<int, vector<int>> idx;
  5.     MajorityChecker(vector<int>& arr) {
  6.         for(auto i = 0; i < arr.size(); ++i)
  7.             idx[arr[i]].push_back(i);
  8.         a = arr;
  9.     }
  10.    
  11.     int query(int left, int right, int threshold) {
  12.         for(auto n = 0; n < 10; ++n){
  13.             auto num = a[left + rand() % (right - left + 1)];
  14.             if(idx[num].size() < threshold) continue;
  15.             auto up = upper_bound(idx[num].begin(), idx[num].end(), right);
  16.             auto low = lower_bound(idx[num].begin(), idx[num].end(), left);
  17.             if(up-low >= threshold)
  18.                 return num;
  19.         }
  20.         return -1;
  21.     }
  22. };
  23.  
  24. /**
  25.  * Your MajorityChecker object will be instantiated and called as such:
  26.  * MajorityChecker* obj = new MajorityChecker(arr);
  27.  * int param_1 = obj->query(left,right,threshold);
  28.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement