class Solution {
public:
double fun(vector<int> nums1,int n,vector<int> nums2,int m,int k)
{
if(nums1.size()-n>nums2.size()-m) return fun(nums2,m,nums1,n,k);
if(n==nums1.size()) return nums2[k-1+m];
if(k==1) return min(nums1[n],nums2[m]);
int pa=min(k/2,(int)nums1.size()-n),pb=k-pa;
if(nums1[pa-1+n]<nums2[pb-1+m]) return fun(nums1,n+pa,nums2,m,k-pa);
if(nums1[pa-1+n]>nums2[pb-1+m]) return fun(nums1,n,nums2,m+pb,k-pb);
return nums1[pa-1+n];
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int tot=nums1.size()+nums2.size();
if(tot&1) return fun(nums1,0,nums2,0,tot/2+1);
return (fun(nums1,0,nums2,0,tot/2)+fun(nums1,0,nums2,0,tot/2+1))/2;
}
};