View Code of Problem 133

//既然要查找 用二分(归并)+排序 左右靠拢
#include<iostream>
#include<algorithm>
using namespace std;
const int manx=100010;
int arr[manx];
int flag=0;
int main()
{
	int i=0,j=0;
	int a=0;
	cin>>a;
	while(a--)
	{
		flag=0;
		int n,m;
		cin>>n>>m;
		for(i=0;i<n;i++)
		{
			cin>>arr[i];
		}
		i=0,j=n-1;
		sort(arr,arr+n);
		while(i<j)
		{
			if(arr[i]+arr[j]==m)
			{
				flag=1;
				break;
			}
			else if(arr[i]+arr[j]>m)
			{
				j--;//试着变小
			}
		    else
			{
				i++;
			}
		}
			if(flag)
				cout<<"YES"<<endl;
			else
				cout<<"NO"<<endl;
		}
		return 0;
}

Double click to view unformatted code.


Back to problem 133