#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>#include<stack>#include<queue>#include<set>#include<map>usingnamespace std;constint maxn =100001;//散列法intmain(){// freopen("1.txt","r",stdin);int n,m,num[maxn];
cin>>n>>m;
map<int,int> mp;for(int i =0;i<n;i++){
cin>>num[i];
mp[num[i]]+=1;}sort(num,num+n);int flag =0;for(int i =0;i<n;i++){int t = m - num[i];if(mp[t]>=1&& t!=num[i]){printf("%d %d",num[i],t);
flag =1;break;}elseif(mp[t]>=2&& t==num[i]){printf("%d %d",num[i],t);
flag =1;break;}}if(flag ==0)printf("No Solution");return0;}
//二分法#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>#include<stack>#include<queue>#include<set>#include<map>usingnamespace std;constint maxn =100001;intmain(){// freopen("1.txt","r",stdin);int n,m,num[maxn];
cin>>n>>m;for(int i =0;i<n;i++){
cin>>num[i];}sort(num,num+n);int*flag;int i;int temp;int mark =0;for(i =0;i<n;i++){int t = m - num[i];
flag =upper_bound(num,num+n,t);
temp = flag - num -1;if(temp > i && temp <= n -1&& num[temp]== t){
mark =1;break;}elsecontinue;}if(mark ==0)printf("No Solution");elseprintf("%d %d",num[i],num[temp]);return0;}