第一问最长不上升子序列
此时维护的单调栈具有不上升的性质 即非严格的递减 我们的目的是让栈中的元素尽可能的多 所以相等的元素保留在栈中
第二问最长上升子序列
此时需要严格递增 所以相等的元素需要替换
for(int i=0;i<n;i++)//最长不上升子序列的长度
{
if(!k)
stk[k++]=a[i];
else
{
int pos=upper_bound(stk,stk+k,a[i],cmp)-stk;
stk[pos]=a[i];
if(pos==k)k++;
}
}
ans1=k;
for(int i=0;i<n;i++)//最长上升子序列的长度
{
if(!k)
stk[k++]=a[i];
else
{
int pos=lower_bound(stk,stk+k,a[i])-stk;
stk[pos]=a[i];
if(pos==k)k++;
}
}
ans2=k;