最长上升子序列(nlogn)
const int maxn=10010;
int maxup(int *ta,int alen)//原数组从1到n
{
int temp[maxn];//存长度i结尾的最小值
temp[0]=-1e9;
temp[1]=ta[1];
int maxLen=1;
for(int i=2;i<=alen;i++)
{
//if(ta[i]>=temp[maxLen])//非严格
if(ta[i]>temp[maxLen])
temp[++maxLen]=ta[i];
else
{
//int pos=upper_bound(temp,temp+maxLen,ta[i])-temp;//非严格
int pos=lower_bound(temp,temp+maxLen,ta[i])-temp;
temp[pos]=ta[i];
}
}
return maxLen;
}
最长公共子序列
for(i=0;i<l1;i++)
{
for(j=0;j<l2;j++)
{
if(s[i]==t[j])
dp[i+1][j+1]=dp[i][j]+1;
else dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);
}
}