题目链接
题意:构造一个min的LIS,跟一个max的LIS
void f1(int n,vector<pair<int,int> > vec)
{
int len=vec.size(),cnt=n+1;
vec[0].F++;
vector<int>ans;
for(int i=0;i<len;i++)
{
vec[i].F--,vec[i].S++;
// cout<<vec[i].F<<" "<<vec[i].S<<endl;
while(vec[i].F--)
ans.pb(cnt--);
int num=cnt-vec[i].S+1;
cnt-=vec[i].S;
while(vec[i].S--)
ans.pb(num++);
}
for(auto it:ans)
cout<<it<<" ";
cout<<endl;
}
void f2(int n,vector<pair<int,int> > vec)
{
int len=vec.size(),cnt=1;
vec[len-1].S++;
vector<int>ans;
for(int i=0;i<len;i++)
{
int num=cnt+vec[i].S;
stack<int>st;
while(vec[i].F--)
st.push(num++);
while(!st.empty())
ans.pb(st.top()),st.pop();
while(vec[i].S--)
ans.pb(cnt++);
cnt=num;
}
for(auto it:ans)
cout<<it<<" ";
cout<<endl;
}
signed main()
{
IOS;
file();
int t;
cin>>t;
while(t--)
{
int n;
string str;
vector<pair<int,int> >vec;
cin>>n>>str;
int a[2]={0};
for(int i=0;i<n-1;i++)
{
str[i]=='>'?a[0]++:a[1]++;
if(str[i]=='<'&&str[i+1]=='>'&&i<n-2||i==n-2)
{
vec.pb( {a[0],a[1]} );
// cout<<a[0]<<" "<<a[1]<<endl;
memset(a,0);
}
}
f1(n-1,vec);
f2(n-1,vec);
}
return 0;
}