#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int b[100000];//保存升序元素
int blen = 1, n;
int binarysearch(int val)
{
int l = 1, r = blen;
while (l < r)
{
int mid = (l + r) / 2;//找靠左的值
if (b[mid] >= val)
r = mid;
else
l = mid + 1;
}
return l;
}
void solve(int* nums)
{
b[1] = nums[0];
for (int i = 1; i < n; i++)
{
if (nums[i] > b[blen])
b[++blen] = nums[i];
else//二分
{
int m = binarysearch(nums[i]);
b[m] = nums[i];
}
}
printf("%d", blen);
}
int main()
{
printf("输入元素个数: ");
scanf("%d", &n);
int* nums = (int*)malloc(4 * n);
printf("输入元素:");
for (int i = 0; i < n; i++)
scanf("%d", &nums[i]);
solve(nums);
return 0;
}
可以做力扣题号300这道题