给一个只含小写字符的字符串,求其字典序最大的子集并输出
先后按字符的字典序降序和其对应下标升序排序,然后贪心输出即可
#include <iostream>
#include <map>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#define rep(i, j, k) for(ll i = j; i <= k; i++)
#define ll long long
#define maxn 500009
#define inf 0x7fffffff
using namespace std;
int n, now = 0;
struct wbysr
{
char x;
int y;
}a[maxn];
bool cmp (wbysr x, wbysr y)
{
return (x.x > y.x) || (x.x == y.x && x.y < y.y);
}
int main ()
{
string s;
cin >> s;
n = s.length ();
rep (i, 0, n - 1)
a[i + 1].x = s[i], a[i + 1].y = i + 1;
sort (a + 1, a + n + 1, cmp);
rep (i, 1, n)
if (a[i].y > now)
printf ("%c", a[i].x), now = a[i].y;
cout << endl;
return 0;
}