#include<iostream>
#include<cstring>
int pos_min[100005], pos_max[100005];
int main()
{
int n, k, ans = -1;
std::cin >> n >> k;
memset ( pos_min, 127, sizeof ( pos_min ) );
memset ( pos_max, -1, sizeof ( pos_max ) );
for ( int i = 1; i <= n; i++ )
{
int x;
std::cin >> x;
pos_max[x] = std::max ( pos_max[x], i );
pos_min[x] = std::min ( pos_min[x], i );
}
for ( int i = 1; i <= n - k; i++ )
{
if ( pos_max[i + k] != pos_max[0] && pos_min[i] != pos_min[0] )
ans = std::max ( ans, pos_max[i + k] - pos_min[i], ans );
}
std::cout << ans;
return 0;
}
题目大意:
给定一个长度为 n 的数组,其中第 i 个数字为 ai。如果两个数字的差值刚好为 k,我们称这两个数字是一组“好数对”。
现在你需要找到所有“好数对”中距离相差最大的那一对的距离。
距离指的是两个数字在数组中的位置之差的绝对值。例如 ai 和 aj 的距离为 ∣i−j∣,其中 ∣x∣ 为 x 的绝对值。
保证给定数组中至少存在一个好数对。
报错: [错误] '__comp' cannot be used as a function