最长不下降子序列:
换成最长不上升时,把x变成负的就行了
Dilworth定理:一个序列中,最长不上升子序列的最小覆盖度等于序列中最长上升自序列的长度。
int ans[100005],len=1;
int binary_search(int x){
int left,right,mid;
left=0,right=len;
while(left<right){
mid = left+(right-left)/2;
if(ans[mid]>=x) right=mid;
else left=mid+1;
}
return left;
}
int main(){
int n,x;
cin>>n>>x;
ans[1]=x;
for(int i=2; i<=n; ++i){
cin>>x;
if(x>=ans[len])
ans[++len]=x;
else{
int pos=binary_search(x);
//int pos=lower_bound(ans,ans+len,arr[i])-ans;
ans[pos] = x;
}
}
printf("%d\n",len);
return 0;
}