View Code of Problem 133

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<climits>
#include<cmath>
#include<map>
#include<set>
#include<queue>

using namespace std;


int main()
{
	int T;
	cin >> T;

	for (int i = 0; i < T; i++) {

		int n, x;
		cin >> n >> x;

		vector<int> nums(n);

		for (int j = 0; j < n; j++)
			cin >> nums[j];

		sort(nums.begin(), nums.end());

		int flag = 0;
		for (int j = 0; j < n; j++) {

			int left = j + 1;
			int right = nums.size() - 1;

			while (left <= right) {

				int pos = (right - left) / 2 + left;

				if (nums[pos] + nums[j] == x) {

					flag = 1;
					break;
				}

				if (nums[pos] + nums[j] > x)
					right = pos - 1;

				if (nums[pos] + nums[j] < x)
					left = pos + 1;
			}

			if (flag == 1)
				break;
		}

		if (flag == 1)
			cout << "YES" << endl;
		else
			cout << "NO" << endl;
	}
}

Double click to view unformatted code.


Back to problem 133