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

 

解题思路

       分析题目的特性,行列具有非递减的性质。先判断最小行的位置,在该行采取二分法判断最大列的位置。

 

全部程序代码如下

BJTU 小A的卡片_第1张图片 

BJTU 小A的卡片_第2张图片 

BJTU 小A的卡片_第3张图片 

你可能感兴趣的:(C++)