题目链接:http://codeforces.com/contest/1156/problem/C
题目大意:给你一个n个元素的数组,和一个z。求使得 (a[i]-a[j])>=z) 的最大对数。(n<=2e5)

思路:最开始的思路 贪心是把a加入multiset每次查找>=s.begin()+z的元素。同时删除两个元素。
然后推出一个样例:证明并不可行。
4 3
1 4 5 7
如果(1, 4)匹配。那么只有一对。如果(1, 5), (4, 7)就有两对。

正确思路:把a数组排序。分成2半。前面与后面匹配。

#include<bits/stdc++.h>
#define LL long long

int a[200005];
int main()
{
    int n, m;
    scanf("%d%d",&n,&z);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    sort(a, a+n);
    int L=0, R=n/2, ans=0;
    while(L<n/2&&R<n)
    {
        if(a[R]-a[L]>=z)//满足条件
        {
            ans++;
            L++, R++;
        }
        else
        {
            R++;		//不满足条件时。R++。因为a[L]最小。如果a[L]都不能与a[R]匹配。a[i>L]就更不能与a[R]匹配。
        }
    }
    cout<<ans<<endl;

    return 0;
}