• O(logn)最长上升子序列并输出


    O(logn)最长上升子序列并输出

    +++

    pre数组记录转移。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int N = 1e6 + 10;
    
    string s, a[N];
    int q[N];
    int idx;
    int len;
    int pre[N];
    
    int main()
    {
        memset(pre, -1, sizeof pre);
        
        cin >> s;
        for (int i = 0; i < s.size(); i ++ )
        {
            if (s[i] >= 65 && s[i] <= 90) idx ++ ;
            a[idx] += s[i];
        }
        
        //for (int i = 1; i <= idx; i ++ ) cout << a[i] << endl;
        
        for (int i = 1; i <= idx; ++i)
        {
            int l = 0, r = len;
            while (l < r)
            {
                int mid = l + r + 1 >> 1;
                if (a[q[mid]] < a[i]) l = mid;
                else r = mid - 1;
            }
            len = max(len, r + 1);
            pre[i] = q[r];  //pre[i]记录方案的转移
            q[r + 1] = i;
        }
        
        //for (int i = 1; i <= idx; i ++ ) cout << q[i] << ' ';
        //cout << endl;
        //for (int i = 1; i <= idx; i ++ ) cout << pre[i] << ' ';
        
        vector<string> res;
        for (int i = q[len]; i; i = pre[i]) res.push_back(a[i]);
        for (int i = res.size() - 1; i >= 0; --i) cout << res[i];
        cout << endl;
        
        return 0;
    }
    
  • 相关阅读:
    2.2 建立示例数据库
    2.1.4 基本概念
    8. 在NOARCHIVELOG模式下用户管理的备份与恢复
    2.1.2 系统全局区
    考过042
    ORA1157错误解决手册(转)
    4. 用户管理的备份
    Kohana之LOG使用
    jq插件之easing
    Svn服务器之必须提交更改日志篇
  • 原文地址:https://www.cnblogs.com/scl0725/p/14805643.html
Copyright © 2020-2023  润新知