非常基础的二分法-寻找序列中是否存在某一条件的元素 的应用
AC代码
#include<cstdio>
#include<iostream>
#include<set>
#include<vector>
#include<map>
#include<algorithm>using namespace std;const int SUP = 100000000;
const int maxn = 100010;int n,T;
int M[maxn];int BS(int begin,int l,int r){int mid;while(l<=r){mid = (l+r)/2;if(M[begin]+M[mid]<T){l = mid+1;}else if(M[begin]+M[mid]>T){r = mid-1;}else return mid;}return -1;
}int main(){cin>>n>>T;for(int i=0;i<n;i++){cin>>M[i];}sort(M,M+n);for(int i=0;i<n;i++){int j = BS(i,i+1,n-1);if(j!=-1){printf("%d %d",M[i],M[j]);return 0;}}printf("No Solution\n");return 0;
}