using
System;
using
System.Collections.Generic;
class
GFG
{
static
List<
int
> mergeKArrays(List<List<
int
>> arr)
{
List<
int
> output =
new
List<
int
>();
List<Tuple<
int
,Tuple<
int
,
int
>>> pq =
new
List<Tuple<
int
,Tuple<
int
,
int
>>>();
for
(
int
i = 0; i < arr.Count; i++)
pq.Add(
new
Tuple<
int
,
Tuple<
int
,
int
>>(arr[i][0],
new
Tuple<
int
,
int
>(i, 0)));
pq.Sort();
while
(pq.Count > 0) {
Tuple<
int
,Tuple<
int
,
int
>> curr = pq[0];
pq.RemoveAt(0);
int
i = curr.Item2.Item1;
int
j = curr.Item2.Item2;
output.Add(curr.Item1);
if
(j + 1 < arr[i].Count)
{
pq.Add(
new
Tuple<
int
,Tuple<
int
,
int
>>(arr[i][j + 1],
new
Tuple<
int
,
int
>(i, j + 1)));
pq.Sort();
}
}
return
output;
}
static
void
Main()
{
List<List<
int
>> arr =
new
List<List<
int
>>();
arr.Add(
new
List<
int
>(
new
int
[]{2, 6, 12}));
arr.Add(
new
List<
int
>(
new
int
[]{1, 9}));
arr.Add(
new
List<
int
>(
new
int
[]{23, 34, 90, 2000}));
List<
int
> output = mergeKArrays(arr);
Console.WriteLine(
"Merged array is "
);
foreach
(
int
x
in
output)
Console.Write(x +
" "
);
}
}