/*
算法思想:1.如果num[i]<=num[i+1],如果count[num[i]]>1,则删除num[i],否则不删除。
2.数字的最大值总是保留第一个出现的位置,其他则删除。
4 2 3 2 4
首先删除的非最大值:
..... 得到:4 3 2 4
然后处理最大数字值,保留第一个出现的:
..... 得到:4 3 2
*******************************************************************************************************
答案有问题。。请看评论。。测试用例少,所以AC了。有同学,直接set得到不同的数字,然后大到小输出60%。
谢谢各位的指正,给出的case。
*/
#include<iostream>
#include<climits>
#include<cstring>
#include<string>
using namespace std;
int main(){
string str;
while(getline(cin,str)){
if(str.length()<=1) {cout<<str<<endl; continue;}
/*num_count 计数数组 */
int num_count[10]={0};
/* 最大值位置 */
int max_val=INT_MIN;int max_pos=-1;
for(int i=0;i<str.length();i++){
int tmp=str[i]-'0';
num_count[tmp]++;
if(tmp>max_val) {max_val=tmp;max_pos=i;}
}
/*删除的位置,标志位*/
int *to_delete=new int[str.length()];
memset(to_delete,0,sizeof(int)*str.length());
for(int i=1;i<str.length();i++){
int tmp=str[i-1]-'0';
if(str[i]>=str[i-1]&&num_count[tmp]>1){
num_count[tmp]-=1;
to_delete[i-1]=-1;
}
}
string result;
for(int i=0;i<str.length();i++){
if(i==max_pos) result=result+str[i];
if(to_delete[i]!=-1&&(str[i]-'0'!=max_val)) result=result+str[i];
}
cout<<result<<endl;
}
return 0;
}