有序两数之和
题目描述
给定一个长度为 n 的非递减整数序列 a1,a2,…,an(已按从小到大排好序),以及一个整数 t。
请判断是否存在两个下标 i,j(1≤i<j≤n),使得:
ai+aj=t
若存在多组解,输出字典序最小的数对 (ai,aj),即:
- 先让 ai 尽量小;
- 在 ai 相同的前提下,让 aj 尽量小。
(因序列非递减,这等价于:在所有合法下标对中,取 i 最小者;若仍有多组,再取 j 最小者。)
若不存在,输出 No。
输入格式
第一行两个整数 n,t。
第二行 n 个整数 a1,a2,…,an,保证 a1≤a2≤⋯≤an。
输出格式
若存在解,输出一行两个整数 x y(即上面规定的那一组 ai aj)。
若不存在,输出一行 No。
样例
5 9
1 2 4 5 7
2 7
4 10
1 3 5 8
No
6 8
1 3 3 4 5 5
3 5
样例解释
- 对于样例 1,合法数对有 (2,7)、(4,5)。按字典序,2 7 更小,故输出 2 7。
- 对于样例 2,不存在和为 10 的两个数,故输出
No。
- 对于样例 3,合法数对有 (3,5)(存在多组下标对应 3 和 5)、(4,4) 不合法(因为要求 i<j)。字典序最小的数对为 3 5。
数据范围
对于所有数据,2≤n≤105,∣ai∣≤109,∣t∣≤2×109,序列非递减。
子任务划分如下:
| 子任务 |
分值 |
数据范围 |
特殊性质 |
| 1 |
30 |
2≤n≤103 |
无 |
| 2 |
70 |
2≤n≤105 |