二分查找确定值
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int n,m,k[10000];
bool search(int x)
{
intl=0,r=n;
while(l<r)
{
inti=(l+r)>>1;
if(k[i]==x)
return true; //找到
elseif(k[i]<x)
l=i+1;
else
r=i;
}
return false; //没找到
}
int main()
{
boolp=false;
sort(k,k+n);
boolf=false;
for(inta=0;a<n;a++)
for(intb=0;b<n;b++)
for(intc=0;c<n;c++)
{
if(search(m-k[b]-k[a]-k[c]))
{
p=true;
}
}
if(p)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return0;
}
以上是 n三次方logn 以下有n方logn 的算法
要求是 枚举k[c]k[d]的和 后调用公式 枚举耗时n方log n 调用公式同左 因此总时间就是n方logn