按照编程之美的思路书写。理解起来还挺费劲了。
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
int main()
{
int height[20] = {1,4,5,2,3,7,4,6,5,2,8,3,7};
int l = 13;
int MaxV[20];
int MaxL = 1;
MaxV[0] = -65535;
MaxV[1] = height[0];
for(int i=1; i<l; ++i)
{
cout<<height[i]<<endl;
if(height[i] > MaxV[MaxL]){
MaxL++;
MaxV[MaxL] = height[i];
}
else{
/*
int j;
for(j=MaxL; j>=1; j--){
if(MaxV[j]>height[i] && MaxV[j-1]<height[i]){
MaxV[j] = height[i];
break;
}
}
*/
int low = 0, high = MaxL;
int mid;
while(low < high){
mid = (low+high)/2;
if(height[i] > MaxV[mid]){
low = mid+1;
}
else{
high = mid-1;
}
}
if(MaxV[high] > height[i])
MaxV[high] = height[i];
else
MaxV[high+1] = height[i];
}
}
for(int i=0; i<=MaxL; ++i)
cout<<MaxV[i]<<" ";
cout<<endl;
cout<<MaxL<<endl;
system("PAUSE");
}