NYOJ 17:長男シーケンスの単調インクリメント【2点】


最長男シーケンスを単調にインクリメント
時間制限:3000 ms |  メモリ制限:65535 KB
難易度:
4
説明
文字列の最大増分のサブシーケンスの長さを求めます.
例えば、dabdbfの一番長いインクリメントサブシーケンスはabdfで、長さは4です.
入力
最初の行の整数0その後のn行には、各行に1つの文字列があります.この文字列の長さは10000を超えません.
出力
出力文字列の最大値は、サブシーケンスの長さを増加させます.
サンプル入力
3
aaa
ababc
abklmncdefg
サンプル出力
1
3
7
AC-code:
#include<cstdio>
#include<cstring>
char str[10005],dp[10005];
int main()
{
	int n,i,len,l,r,mid;
	scanf("%d",&n);
	while(n--)
	{
		int k=1;
		scanf("%s",str);
		len=strlen(str);
		dp[0]=str[0];
		for(i=1;i<len;i++)
		{
			if(str[i]<dp[0])
				dp[0]=str[i];
			if(dp[k-1]<str[i])
				dp[k++]=str[i];
			else
			{
				l=0,r=k-1;
				while(l<=r)
				{
					mid=(l+r)/2;
					if(str[i]<=dp[mid])
						r=mid-1;
					else
						l=mid+1;
				}
				dp[l]=str[i];
			}
		}
		printf("%d
",k); } return 0; }