lower_bound(begin,end,num):二分查找第一个大于等于num的数字
upper_bound(begin,end,num):二分查找第一个大于num的数字
lower_bound(begin,end,num,greater< type>()):二分查找第一个小于等于num的数字
upper_bound(begin,end,num,greater< type>()):二分查找第一个小于num的数字
int s[N],n=1;
s[0]=d[0];
for(int i=1;i<size;++i){
if(s[n-1]>=d[i])s[n++]=d[i];
else{
int t=upper_bound(s,s+n,d[i],greater<int>())-s;
s[t]=d[i];
}
}
cout<<n<<endl;