题目链接:
String Coloring (hard version)
题目解析:
根据 狄尔沃斯定理 这道题其实就是在求最长的递减子序列
因为只有26个字符,直接暴力就行
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[200003],maxx[200],maxxx=0,ans[200003],col;
char c;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>c;
a[i]=c-'a'+1,maxxx=0;
for(int j=a[i]+1;j<=26;j++)
maxxx=max(maxxx,maxx[j]);
ans[i]=maxxx+1,col=max(col,ans[i]);
maxx[a[i]]=max(maxx[a[i]],maxxx+1);
}
cout<<col<<endl;
for(int i=1;i<=n;i++)
cout<<ans[i]<<" ";
return 0;
}