您的位置:首页 > 产品设计 > UI/UE

Lexicographically Maximum Subsequence CodeForces - 197C 单调栈

2017-07-21 21:53 369 查看

题目链接: 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: