D. Shortest and Longest LIS-1034(LIS+構造)

題目鏈接
題意:構造一個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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章