DP加指针反向找
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int B[N][6],A[N],n;
void OUT(int x){
vector<int> V;
V.push_back(x);
for(int i=n;i>1;--i){
V.push_back(B[i][x]);
x=B[i][x];
}
for(int i=V.size()-1;i>=0;--i)
cout<<V[i]<<" ";
}
int main(){
cin>>n;
for(int i=1;i<=n;++i)cin>>A[i];
for(int i=1;i<=5;++i)B[1][i]=1;
for(int i=2;i<=n;++i){
if(A[i]>A[i-1]){
for(int j=1;j<=5;++j){
if(B[i-1][j]>0){
for(int k=j+1;k<=5;++k)B[i][k]=j;
break;
}
}
}
if(A[i]==A[i-1]){
for(int j=1;j<=5;++j){
if(B[i-1][j]>0){
for(int k=1;k<=5;++k){
if(j!=k)B[i][k]=j;
}
}
}
}
if(A[i]<A[i-1]){
for(int j=5;j>=1;--j){
if(B[i-1][j]>0){
for(int k=j-1;k>=1;--k){
B[i][k]=j;
}
}
}
}
}
for(int i=1;i<=5;++i){
if(B[n][i]){
OUT(i);
return 0;
}
}
cout<<-1<<endl;
}