http://poj.org/problem?id=3903
数列里是存从小到大排的数,二分也是为了这个服务的,不断更新。而len才是所求长度
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #define mem(a) memset(a,0,sizeof(a)) 8 using namespace std; 9 10 int main()11 {12 int t,a[100005],f[100005];13 while(cin>>t)14 {15 for(int i=0;i f[len]) f[++len]=a[i];24 else25 {26 l=0,r=len;27 while(l<=r)28 {29 mid=((l+r)>>1);30 if(f[mid]>=a[i]) r=mid-1;31 else l=mid+1;32 }33 f[l]=a[i]; //因为执行l=mid+1的条件就是a[i]大于mid了所以到最后正好能被替换掉的下标就是l或者r+134 }35 }36 cout< <