[CF1304D] Shortest and Longest LIS - 贪心

Posted mollnn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CF1304D] Shortest and Longest LIS - 贪心相关的知识,希望对你有一定的参考价值。

技术图片

看样例,>><>><,要构造 LIS 最短的,我们需要找最小链划分的方案,即包含最少的下降列

很容易想到把连续 < 的看成一段,比如样例就是
.|.|. .|.|. .
每一段内必须上升,考虑让它连续,然后让段末取当前没取过的最大值即可

要构造 LIS 最长的,同理,我们把连续 > 的堪称一段,比如样例就是
. . .|. . .|.
每段内必须下降,考虑让它连续,然后让段膜取当前没去过的最小值即可

#include <bits/stdc++.h>
using namespace std;

const int N = 2e5+5;
int t,n;
char s[N];

signed main() {
    ios::sync_with_stdio(false);
    cin>>t;
    while(t--) {
        cin>>n>>s+1;
        int now,i,j;
        now=n; i=1; j=1;
        while(i<=n) {
            j=i;
            while(j<n && s[j]=='<') ++j;
            for(int k=i;k<=j;k++) cout<<now-j+k<<" ";
            now-=(j-i+1);
            i=j+1;
        }
        cout<<endl;
        now=1; i=1; j=1;
        while(i<=n) {
            j=i;
            while(j<n && s[j]=='>') ++j;
            for(int k=i;k<=j;k++) cout<<now+j-k<<" ";
            now+=j-i+1;
            i=j+1;
        }
        cout<<endl;
    }
}

以上是关于[CF1304D] Shortest and Longest LIS - 贪心的主要内容,如果未能解决你的问题,请参考以下文章

[CF1304D] Shortest and Longest LIS - 贪心

CF 1005F Berland and the Shortest Paths

CF1005F Berland and the Shortest Paths 最短路树计数

CF-div2-620-D. Shortest and Longest LIS 贪心,双指针

CF1051F The Shortest Statement

CF1051F The Shortest Statement