View Code of Problem 3686

#include<bits/stdc++.h>
#include<map>
using namespace std;
int a[1000];
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		int n,x,key;
		map<int,int>m;
		scanf("%d",&n);
		scanf("%d",&x);
		bool flag=false;
		int a[1000];
		memset(a,0,sizeof(a));
		for(int i=0;i<n;i++){
			scanf("%d",&a[i]);
			m[a[i]]=i;
		}
		a[n]=x;
		m[a[n]]=n;
		sort(a,a+n+1);
		key=m.find(x)->second;
		int max=key-1;int min=0;
		while(min<max){
			if(a[min]+a[max]==x){
				flag=true;break;
			}
			else if(a[min]+a[max]>x){
				max--;
			}
			else if(a[min]+a[max]<x){
				break;
			}
		}
		if(flag==true){
			printf("YES");
			printf("\n");
		}
		else{
			printf("NO");
			printf("\n");
		}
	}
}

Double click to view unformatted code.


Back to problem 3686