不是VIP会员,不能显示答案

题目解答

题目:
#include<iostream>

using namespace std;

const int maxn=100000;

int a[maxn], b[maxn],n;

int Search(int num, int low, int high)

{

int mid;

while(low<=high)

{

mid=(low+ high)/2;

if(num>=b[mid]) low=mid+1;

else high=mid-1;

}

return low;

}

int main()

{

int len, pos;

cin>>n;

for(int i=1; i<=n; i++)

cin>>a[i];

b[1]=a[1];

len=1;

for(int i=2; i<=n; i++)

{

if(a[i]>=b[len])

{

len++;

b[len]=a[i];

}

else

{

pos=Search(a[i],1,len);

b[pos]=a[i];

}

}

cout<<len<<endl;

return 0;

}


判断题

1) (1分)输入的a[i]必须在[1,n]范围内。( )

2) (1分)把第11行的“mid+1” 改成“mid”不影响程序运行结果。( )

3) 当数组a单调不降时输出为1。( )

4) 数组b内的元素始终单调不降。()




选择题

5) 当输入第一行为20,第二行为 1 20 2 19 3 18 4 17...9 12 10 11时,输出为( )。

6) 该算法的时间复杂度为( )。
考点:
分析:
解答:
评论:
老师: