zoukankan      html  css  js  c++  java
  • [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;
        }
    }
    
  • 相关阅读:
    Consul注销实例
    sql优化基础篇
    linux下执行java类(运行java定时器)
    ExecutorService 的理解与使用
    精度计算的方法
    内部类详解
    接口的作用
    面向对象之继承和组合浅谈
    构造器前篇
    教师编制考试数据分析
  • 原文地址:https://www.cnblogs.com/mollnn/p/12321954.html
Copyright © 2011-2022 走看看