标签:name max vector for lang ace return space cto
+++
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;
}
标签:name max vector for lang ace return space cto
原文地址:https://www.cnblogs.com/scl0725/p/14805643.html