Median of Bitwise XOR of all submatrices starting from the top left corner | C # program to implement the above approach ; Function to find the median of bitwise XOR of all the submatrix whose topmost leftmost corner is ( 0 , 0 ) ; dp [ i , j ] : Stores the bitwise XOR of submatrix having top left corner at ( 0 , 0 ) and bottom right corner at ( i , j ) ; Stores count of submatrix ; Base Case ; Base Case ; Fill [ , ] dp using tabulation ; Fill dp [ i , j ] ; Driver code
using System ; class GFG { static double findMedXOR ( int [ , ] mat , int N , int M ) { int [ , ] dp = new int [ N , M ] ; int [ ] med = new int [ N * M ] ; dp [ 0 , 0 ] = mat [ 0 , 0 ] ; med [ 0 ] = dp [ 0 , 0 ] ; int len = 1 ; for ( int i = 1 ; i < N ; i ++ ) { dp [ i , 0 ] = dp [ i - 1 , 0 ] ^ mat [ i , 0 ] ; med [ len ++ ] = dp [ i , 0 ] ; } for ( int i = 1 ; i < M ; i ++ ) { dp [ 0 , i ] = dp [ 0 , i - 1 ] ^ mat [ 0 , i ] ; med [ len ++ ] = dp [ 0 , i ] ; } for ( int i = 1 ; i < N ; i ++ ) { for ( int j = 1 ; j < M ; j ++ ) { dp [ i , j ] = dp [ i - 1 , j ] ^ dp [ i , j - 1 ] ^ dp [ i - 1 , j - 1 ] ^ mat [ i , j ] ; med [ len ++ ] = dp [ i , j ] ; } } Array . Sort ( med ) ; if ( len % 2 == 0 ) { return ( med [ ( len / 2 ) ] + med [ ( len / 2 ) - 1 ] ) / 2.0 ; } return med [ len / 2 ] ; } public static void Main ( String [ ] args ) { int [ , ] mat = { { 1 , 2 } , { 2 , 3 } } ; int N = mat . GetLength ( 0 ) ; int M = 2 ; Console . WriteLine ( findMedXOR ( mat , N , M ) ) ; } }