题目链接: Lexicographically Maximum Subsequence CodeForces - 197C
题目大意
给你一个只包含小写字母大字符串s( |s|≤105 ), 求它字典序最大的子序列
思路
字典序要大, 那么第一个字母一定要是所有字母里面最大的, 然后第二个字母一定要是第一个字母后面所有字母中最大的, 依次类推
所以这个子序列: 原来字符串的顺序, 一定单调不递减(每次都取最大的)
可以将字符依次push进单调栈来得到, 代码简短高效
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5;
char s[maxn], ans[maxn];
int main()
{
cin >> s;
int len = 0;
for(int i=0; s[i]!='\0'; ++i)
{
while(len > 0 && ans[len-1] < s[i]) --len;
ans[len++] = s[i];
}
for(int i=0; i<len; ++i) cout << ans[i];
cout << endl;
return 0;
}