E - Match Points

    xiaoxiao2022-07-07  177

    添加链接描述

    二分法查找; mid截开前面的mid个数和后面的mid个数,如果满足,则现在有ans=mid个数,l=mid+1; 即a[i]和a[n-x+i] 如果不满足,r=mid-1;

    /**/ #include<bits/stdc++.h> using namespace std; long long a[200010]; int n; long long z; int yes(int x) { int i; for(i=0;i<x;i++) { if(a[n-x+i]-a[i]<z) return 0; } return 1; } int main() { int i,l,r,mid; long long ans; scanf("%d %lld",&n,&z); for(i=0;i<n;i++) { scanf("%lld",&a[i]); } sort(a,a+n); l=0; r=n/2; while(l<=r) { mid=(l+r)/2; if(yes(mid)) { l=mid+1; ans=mid; } else { r=mid-1; } } printf("%lld\n",ans); return 0; }

    最新回复(0)