用了简单的做法 lower_bound
看了他们暴力枚举才知道二分的使用意义 就是在查询能否在数组中找到-c这个值

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int a[N];
int n, x;
bool find(int c)
{
    return c == *lower_bound(a, a+n, c);
}

int main()
{
    cin >> n >> x;
    for (int i = 0; i < n; i ++) cin >> a[i];
    sort(a, a+n);
    bool flag = false;
    for (int i = 0; i < n; i ++)
           for (int j = 0; j < n; j ++)
           {
               int c = a[i]*a[i]*x + a[j]*x;
               if (find(-c)) {
                   flag = true;
               }
           }
    if (flag) puts("YES");
    else puts("NO");
    return 0;
}