题目: 传送门
思路: 判断是否有一个数重复了三次以上,如果有则不能构成,然后将所给序列从小到大排序,取一个上升的序列,剩下的数从大往小就下降的序列,输出即可
vector<int> v1,v2;
int vis[200010];
int viss[200010];
int main() {
int n;
cin>>n;
for(int i=0;i<n;i++) {
int a;
cin>>a;
if(vis[a]==0) {
v1.push_back(a);
vis[a]++;
}
else if(viss[a]==0) {
v2.push_back(a);
viss[a]++;
}
else {
cout<<"NO"<<endl;
return 0;
}
}
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
cout<<"YES"<<endl;
cout<<v1.size()<<endl;
for(int i=0;i<v1.size();i++) {
cout<<v1[i];
if(i!=v1.size()) cout<<' ';
}
cout<<endl;
cout<<v2.size()<<endl;
for(int i=v2.size()-1;i>=0;i--) {
cout<<v2[i];
if(i!=0) cout<<' ';
}
cout<<endl;
return 0;
}