#699. 有序两数之和

有序两数之和

有序两数之和

题目描述

给定一个长度为 nn 的非递减整数序列 a1,a2,,ana_1, a_2, \ldots, a_n(已按从小到大排好序),以及一个整数 tt

请判断是否存在两个下标 i,ji, j1i<jn1 \le i < j \le n),使得:

ai+aj=ta_i + a_j = t

若存在多组解,输出字典序最小的数对 (ai,aj)(a_i, a_j),即:

  • 先让 aia_i 尽量小;
  • aia_i 相同的前提下,让 aja_j 尽量小。

(因序列非递减,这等价于:在所有合法下标对中,取 ii 最小者;若仍有多组,再取 jj 最小者。)

若不存在,输出 No

输入格式

第一行两个整数 n,tn, t

第二行 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n,保证 a1a2ana_1 \le a_2 \le \cdots \le a_n

输出格式

若存在解,输出一行两个整数 x yx\ y(即上面规定的那一组 ai aja_i\ a_j)。

若不存在,输出一行 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

样例解释

  • 对于样例 11,合法数对有 (2,7)(2,7)(4,5)(4,5)。按字典序,2 72\ 7 更小,故输出 2 72\ 7
  • 对于样例 22,不存在和为 1010 的两个数,故输出 No
  • 对于样例 33,合法数对有 (3,5)(3,5)(存在多组下标对应 3355)、(4,4)(4,4) 不合法(因为要求 i<ji<j)。字典序最小的数对为 3 53\ 5

数据范围

对于所有数据,2n1052 \le n \le 10^5ai109|a_i| \le 10^9t2×109|t| \le 2\times 10^9,序列非递减。

子任务划分如下:

子任务 分值 数据范围 特殊性质
11 3030 2n1032 \le n \le 10^3
22 7070 2n1052 \le n \le 10^5