90pts求助QwQ
查看原帖
90pts求助QwQ
377969
george0929楼主2023/3/28 22:05

RT,用最长上升子序列做的:

#include<bits/stdc++.h>
using namespace std;
string s[1000005],d[1000005],ans[1000005];
int pos[1000005];
int main(){
	int cnt=0;
	string S;
	cin>>S;
	for(int i=0;i<S.length();i++){
		if(S[i]>='A'&&S[i]<='Z'){
			cnt++;
		}
		s[cnt]+=S[i];
	}
	int len=1;
	d[len]=s[1];
	for(long long i=2;i<=cnt;i++){
		if(s[i]>d[len]){
			len++; 
			d[len]=s[i];
			pos[i]=len;
		}else{
			int qwq=lower_bound(d+1,d+1+len,s[i])-d;
			d[qwq]=s[i];
			pos[i]=qwq;
		}
	}
	string mx="";
	for(int i=cnt;i>=1;i--){
		if(len==0){
			break;
		}
		if(pos[i]==len){
			ans[len]=s[i];
			len--;
		}
	}
	for(int i=1;i<=cnt;i++){
		cout<<ans[i];
	}
}

WA on 4

2023/3/28 22:05
加载中...