#include int merge_cost( int *arr, int lowest, int highest ) { if ( lowest == highest - 1 ) { return 0; } int mid = (lowest + highest) / 2; int cost1 = merge_cost( arr, lowest, mid ); int cost2 = merge_cost( arr, mid, highest ); int cost = cost1 + cost2; int* new_array = new int[ highest - lowest ]; int len1 = mid - lowest; int len2 = highest - mid; int index1 = lowest; int index2 = mid; int index = 0; while( len1 > 0 && len2 > 0 ) { if ( arr[ index1 ] < arr[ index2 ] ) { new_array[ index ] = arr[ index1 ]; index++; index1++; len1--; } else { new_array[ index ] = arr[ index2 ]; index++; index2++; len2--; cost += len1; } } if ( len1 > 0 ) { while( index1 < mid ) { new_array[ index++ ] = arr[ index1++ ]; } } else { while( index2 < highest ) { new_array[ index++ ] = arr[ index2++ ]; } } for ( int i = 0; i < highest - lowest; i++ ) { arr[ lowest + i ] = new_array[ i ]; } delete [] new_array; return cost; } int main( void ) { int N, K; std::cin >> N >> K; int max = -1; int max_index = -1; for ( int index = 0; index < K; index++ ) { int arr[ 100000 ]; for ( int i = 0; i < N; i++ ) { std::cin >> arr[ i ]; } int cost = merge_cost( arr, 0, N ); if ( cost > max ) { max = cost; max_index = index; } } std::cout << ( max_index + 1 ) << std::endl; return 0; }