import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 读取输入 int k = scanner.nextInt(); int n = scanner.nextInt(); int[][] matrix = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrix[i][j] = scanner.nextInt(); } } // 解决问题并输出结果 int result = kthSmallest(matrix, k); System.out.println(result); scanner.close(); } // 寻找矩阵中第k小的元素 public static int kthSmallest(int[][] matrix, int k) { int n = matrix.length; int left = matrix[0][0]; int right = matrix[n - 1][n - 1]; while (left < right) { int mid = left + (right - left) / 2; int count = countLessOrEqual(matrix, mid); if (count < k) { left = mid + 1; } else { right = mid; } } return left; } // 计算矩阵中小于等于target的元素个数 private static int countLessOrEqual(int[][] matrix, int target) { int n = matrix.length; int count = 0; int row = n - 1; int col = 0; while (row >= 0 && col < n) { if (matrix[row][col] <= target) { count += (row + 1); col++; } else { row--; } } return count; } }