using
System;
public
class
GFG
{
public
static
double
getMedian(
int
[] nums1,
int
[] nums2,
int
n)
{
var
low = (
int
)-1.0E9;
var
high = (
int
)1.0E9;
var
pos = n;
var
ans = 0.0;
while
(low <= high)
{
var
mid = low + ((high - low) >> 1);
var
ub = upperBound(nums1, mid) + upperBound(nums2, mid);
if
(ub <= pos)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
ans = low;
pos--;
low = (
int
)-1.0E9;
high = (
int
)1.0E9;
while
(low <= high)
{
var
mid = low + ((high - low) >> 1);
var
ub = upperBound(nums1, mid) + upperBound(nums2, mid);
if
(ub <= pos)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
ans = (ans + low * 1.0) / 2;
return
ans;
}
public
static
int
upperBound(
int
[] arr,
int
key)
{
var
low = 0;
var
high = arr.Length;
while
(low < high)
{
var
mid = low + ((high - low) >> 1);
if
(arr[mid] <= key)
{
low = mid + 1;
}
else
{
high = mid;
}
}
return
low;
}
public
static
void
Main(String[] args)
{
int
[] arr = {1, 4, 5, 6, 10};
int
[] brr = {2, 3, 4, 5, 7};
var
median = getMedian(arr, brr, arr.Length);
Console.WriteLine(
"Median is "
+ median.ToString());
}
}