Advertisement
Rohit4Pal

Untitled

Apr 12th, 2022
559
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. int findNextGreaterIndex(int key,vector<int> &arr){
  2.  
  3.     int low=0,high=arr.size()-1,mid=0;
  4.     while(low<high){
  5.         mid=(low+high)/2;
  6.         if(arr[mid]>key)
  7.             high=mid;
  8.         else    low=mid+1;
  9.     }
  10.     if(arr[low] <= key) return low+1;
  11.     return low;
  12. }
  13. int calculateMedianOfMatrix(vector<vector<int> > &matrix) {
  14.  
  15.     int n=matrix.size(),m=matrix[0].size();
  16.     int median=((n*m)+1)/2;
  17.  
  18.     map<int,int> mp;
  19.     for(int i=0;i<n;i++){
  20.         for(int j=0;j<m;j++){
  21.             int key=matrix[i][j],total=0;
  22.             if(mp.find(key) != mp.end())    //already seen this key
  23.                 continue;
  24.             for(int r=0;r<n;r++)
  25.                 total+=findNextGreaterIndex(key,matrix[r]);
  26.             mp[key]=total;
  27.         }
  28.     }
  29.  
  30.     int sum=0;
  31.     for(auto i:mp){
  32.         if(sum!=0)
  33.             i.second-=sum;
  34.         sum+=i.second;
  35.  
  36.         if(sum>=median)
  37.             return i.first;
  38.     }
  39.  
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement