01BFS
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

给定一个 n \times m 的矩阵 G,每个单元有权值 G_{i, j},请选定其中一个单元为起点,再选定一个起始方向(上下左右),可以多次跳到该方向上权值严格大于当前单元权值的单元上,如果最开始选择的为左右方向,可换一次方向(上或下)继续跳,如果最开始选择的为上下方向,可换一次方向(左或右)继续跳,也可以不换方向,求最多能跳多少次?

输入描述:

本题包含多组数据
第一行包含一个正整数 T1\leq T \leq 1 \times 10^{5})。
对于每组数据:
第一行包含两个正整数 n, m(1 \leq n\times m \leq 1 \times 10^6 )
接下来 n 行,每行包含m个整数(1 \leq G_{i, j}\leq1\times10^5)
\sum_{i=1}^{T} (n\times m) \leq 1 \times 10^{6}

输出描述:

对于每组数据:
输出一行一个数表示最多能跳多少次。
示例1

输入

复制
1
4 4
7 5 5 6
7 5 8 3
7 5 3 6
9 6 9 2

输出

复制
4

说明

容易发现最多跳 4 次。
G_{4,4} \rightarrow G_{2,4} \rightarrow G_{2,2} \rightarrow G_{2,1} 是可行方案之一。
注意,你仅能在跳到某一点时才能选择改变方向,例如 G_{4,4} \rightarrow G_{3,3} \rightarrow G_{3,2} \rightarrow G_{3,1} 是不合法的。