没啥好说的 (沮丧)
#include<bits/stdc++.h>
using namespace std;
const int N=1e9+10;
int t,n;
bool a[N];
long long ans;
int maxn=-1,minn=1;
bool check(int mid){
int k=0;
for(int i=0;i<=min(t,maxn);i++)
if(a[i])k++;
if(k>=mid)return 1;
k=0;
for(int i=0;i>=max(0-t,minn);i--)
if(a[i])k++;
return k>=mid;
}
int main(){
cin>>t>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
a[x]=1;
if(x>0)maxn=max(x,maxn);
if(x<0)minn=min(x,minn);
}
ans=n;
int l=0,r=maxn;
while(l<=r){
int mid=(l+r)/2;
if(check(mid))l=mid+1,ans=mid;
else r=mid-1;
}
cout<<ans;
return 0;
}
首评关注,谢谢各位!!!