我的思路是,既然要找离x最近的两个完全平方数,那就先二分出来,看x在哪两个平方根的之间
再注意到每次只能加减2,说明x和x相邻的平方根的奇偶性必须一致
那么,我们检测x相邻左右的平方根是否与x奇偶性一致,
{
    如果左边的不一致就往左边减1
    如果右边的不一致就往右边加1
}
(一个细节是虽然名字叫做left和right,但是由于while结束循环的条件,最后其实left是右边那个,right是左边那个)
(意思是left其实要加1,right要减1)
之后 把这两个平方根给平方,然后减去x,并除以2;
最后左右的次数比大小,取小的那个就行

一个值得注意的点是,我因为left和right没开long long的原因卡了半天(捂脸orz)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long x;
    cin>>x;
    
    long long left=1;
    long long right=1000000;
    
    while(left<=right)
    {
        long long mid=(left+right)/2;
        if(mid*mid<=x)
        {
            left=mid+1;
        }
        else if(mid*mid>x)
        {
            right=mid-1;
        }
    }
    long long minus;
    long long plus;
    
    if(x%2!=left%2)
    {
        left++;
    }
    if(x%2!=right%2)
    {
        right--;
    }
    minus=abs(x-left*left) / 2;
    plus=abs( right*right-x) / 2;
    cout<<min(minus,plus);
    
}