class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
if (nums1.size()>nums2.size()) return findMedianSortedArrays(nums2,nums1);
int n=nums1.size();
int m=nums2.size();
int n1l=INT_MIN,n1r=INT_MAX,n2l=INT_MIN,n2r=INT_MAX;
int lma=0,rmi=0;
int l = 0, r = n;
while (l<=r){
int mid = (l+r)/1;
int pos = (n+m+1)/2-mid;
n1l= mid==0? INT_MIN:nums1[mid-1];
n1r= mid==n? INT_MAX:nums1[mid];
n2l= pos==0? INT_MIN:nums2[pos-1];
n2r= pos==m? INT_MAX:nums2[pos];
if (n1l<=n2r){
lma= max(n1l,n2l);
rmi= min(n2r,n1r);
l=mid+1;
} else{
r=mid-1;
}
}
return (n+m)%2?lma:(lma+rmi)/2.0;
}
};