题目描述:给你两个长度为n的数组a、b,让你重组b使得任意i都有ai+bi<=x
问能不能求得这样一个b,能Yes不能No

贪心:给最大的ai以最小的bi,次大对次小,以此类推。
按上述贪心构建好之后,发现交换b中的任意两个数,都会让其中至少一个ai+bi变大,所以这个贪心是最优的。
按贪心构造完之后检验即可。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[100010],b[100010];
ll n,x,t;
int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>t;
while(t--)
{
    cin>>n>>x;
    for(int i=1;i<=n;++i) cin>>a[i];
    for(int i=1;i<=n;++i) {cin>>b[i];b[i]=-b[i];}
    sort(a+1,a+1+n);     sort(b+1,b+1+n);
    for(int i=1;i<=n;++i) b[i]=-b[i];
    int flag=1;
    for(int i=1;i<=n;++i)
    {
        if(a[i]+b[i]>x) {flag=0;break;}
    }
    if(flag) printf("Yes\n");
    else printf("No\n");
}
    return 0;
}