做法有点玄学,sort就TLE了,priority_queue <int,vector,greater >就不会TLE但会WA,在第二个测试点WA了,CF数据太多看不到全部,求hack
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int t,n,mid,tot,flag;
priority_queue <int,vector<int>,greater<int> > q;
deque <int> a,b;
signed main(){
scanf("%lld",&t);
while(t--){
a.clear(),b.clear();
flag=1,tot=0;
scanf("%lld",&n);
for(int i=1;i<=n;i++){
int x;
scanf("%lld",&x);
q.push(x);
}
while(!q.empty()){
a.push_back(q.top());
q.pop();
}
int fro=a.front(),bac=a.back();
a.push_front(bac),a.push_back(fro);
mid=n/2;
for(int i=1,j=mid+1;(i<=mid||j<=n);i++,j++){
if(i==1){
if(!(a[0]>a[i]&&a[i]<a[j])||!(a[i]<a[j]&&a[j]>a[i+1])){
flag=0;
break;
}
}
else if(j==n){
if(!(a[j-1]>a[i]&&a[i]<a[j])||!(a[i]<a[j]&&a[j]>a[n+1])){
flag=0;
break;
}
}
else{
if(!(a[j-1]>a[i]&&a[i]<a[j])||!(a[i]<a[j]&&a[j]>a[i+1])){
flag=0;
break;
}
}
b.push_back(a[i]),b.push_back(a[j]);
}
if(!flag){
puts("NO");
continue;
}
puts("YES");
for(int i=0;i<n;i++)printf("%lld ",b[i]);
puts("");
}
return 0;
}