while(l<=r)
{
ll mid = (l+r)/2;
if((ll)(mid*mid*mid)<j) l=mid+1;
else
{
r=mid-1;
ans=mid;
}
}
if(ans*ans*ans==j) return true;
例题
ac代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
bool check(ll x)
{
for(ll i=1; i*i*i<=x; i++)
{
ll j =x-i*i*i;
//printf("j=%lld\n",j);
ll l=1,r=min(j,10000*1ll);//这里的r不能直接=j,否则可能会爆
ll ans=-1;
if(j<=0) continue;
while(l<=r)
{
ll mid = (l+r)/2;
if((ll)(mid*mid*mid)<j) l=mid+1;
else
{
r=mid-1;
ans=mid;
}
}
if(ans*ans*ans==j) return true;
}
return false;
}
int main()
{
int t;
cin>>t;
while(t--)
{
ll n;
scanf("%lld",&n);
if(check(n)) puts("YES");
else puts("NO");
}
return 0;
}