解析:
要求序列非递减,只需求出最长不上升子序列即可,其余位置则需要修改。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+5;
int n,dp[N];
void solve(){
string s;
cin>>n>>s;
int cnt=0;
dp[++cnt]=s[0]-'A';
for(int i=1;i<n;i++){
int x=s[i]-'A';
if(dp[cnt]<=s[i]-'A') dp[++cnt]=s[i]-'A';
else{
int p=upper_bound(dp+1,dp+cnt+1,s[i]-'A')-dp;
dp[p]=s[i]-'A';
}
}
cout<<n-cnt;
}
signed main(){
int t=1;
// scanf("%lld",&t);
while(t--) solve();
return 0;
}