BJTU 小A的卡片
题面描述
小 A 是一个卡片收藏的爱好者,他有一个非常大的正方形卡箱,卡箱中有 n × n 个格子,每个格子中都放着一张卡片,为了方便寻找卡片,小 A 给每个卡片标上一个整数值。卡箱中卡片的值满足从左向右非递减,从上到下非递减。
现给你一个卡片的值,你能快速的找到卡片的位置吗?
输入数据
第一行有一个整数 t (1 ≤ t ≤ 10) ,表示有 t 组数据。
对于每组数据:
第一行有一个整数 n (1 ≤ n ≤ 1000) ,表示正方形卡箱的边长;
接下来有 n 行,每行有 n 个整数 aij (1 ≤ aij ≤ 109) ,表示正方形卡箱中卡片的值。
接下来一行为有一个整数 q (1 ≤ q ≤ 104) ,表示有 q 个询问。对于每个询问:
第一行有一个整数 x (1 ≤ x ≤ 109) 。
保证 ∑ n2 ≤ 2 × 106, ∑ q ≤ 2 × 104 。
输出数据
对个每个询问,如果卡箱中有这张卡片,输出它的位置 x y ,反之输出 -1 。
如果有多个卡片值相同,请输出 x 最小的,如果还有多个相同的,请输出 y 最大的。
样例输入
2
3
1 3 5
2 4 7
6 8 9
3
1
7
10
2
1 1
1 1
1
1
样例输出
1 1
2 3
-1
1 2
解题思路
分析题目的特性,行列具有非递减的性质。先判断最小行的位置,在该行采取二分法判断最大列的位置。
全部程序代码如下