代码先补出来
#include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<cstdlib> #include<ctime> #define INF 0x3f3f3f3f3f #define N 1100 #define MOD 10007 using namespace std; int erfen(int arr[],int n,int m)//从长度为n的数组中找m偏右的值 { int l,r,mid; l=0,r=n-1; if(m>arr[r]) return (r+1); while(l<r) { mid=(l+r)/2; if(m>arr[mid]) l=mid+1; else r=mid; } return r; } int LIS(int arr[],int n) { int lis[N],top,to; top=0; lis[top++]=-1; lis[top]=arr[0];//lis数组 存着对应最长的最小值 for(int i=1;i<n;i++) { if(arr[i]>lis[top]) lis[++top]=arr[i]; else { to=erfen(lis,n+1,arr[i]); lis[to]=arr[i]; } } for(int i=0;i<=top;i++) printf("%d ",lis[i]); puts(""); return top; } int main() { int arr[N]; int n; scanf("%d",&n); srand(time(NULL)); for(int i=0;i<n;i++) { arr[i]=rand()%100; } printf("LIS =%d \n",LIS(arr,n)); }