AT_arc161_b题解
这不是
显然,
然后,枚举三个二进制位下的
那么,从高位到低位枚举就行了,优先满足高位的
常数约为
代码:
#include<bits/stdc++.h>
using namespace std;
long long t,n;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
{
cin>>n;
if(n<7)
{
cout<<-1<<"\n";
continue;
}
long long maxx=0,maxx1=0,maxx2=0,ans=0;
for(long long i=62;i>=0;i--)
{
if(n-(1LL<<i)>=3)
{
maxx=i;
ans+=(1LL<<i);
break;
}
}
for(long long i=maxx-1;i>=0;i--)
{
if(ans+(1LL<<i)<n)
{
maxx1=i;
ans+=(1LL<<i);
break;
}
}
for(long long i=maxx1-1;i>=0;i--)
{
if(ans+(1LL<<i)<=n)
{
maxx2=i;
ans+=(1LL<<i);
break;
}
}
cout<<ans<<"\n";
}
return 0;
}