一开始tle,动态内存后re
查看原帖
一开始tle,动态内存后re
19545
rake66楼主2024/10/13 22:54
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h> 
  
int n,x,d[100010],i,j,len;

int main()
{
	n=1;
	int * a=(int *)malloc(n * sizeof(int));
	while(scanf("%d",&x))
	{
		a=(int *)realloc(a,n * sizeof(int));
		a[n]=x;
		n++;
	}
	--n;
	for(i=1; i<=n; i++)
	    d[i]=0;
	len=1;
	d[len]=a[1];
	for(i=1; i<=n; i++)
	{
		if(a[i]<=d[len])
			d[++len]=a[i];
		else{
			int l=1,r=i;
			while(l<r)//左查
			{
				int mid=(l+r)/2;
				if(d[mid]<a[i])r=mid;
				else l=mid+1;	
			}
			d[l]=a[i];
		}
	}
	printf("%d\n",len);
	memset(d,0,sizeof(d));
	len=1;
	d[len]=a[1];
	for(i=2; i<=n; i++)
	{
		if(a[i]>d[len])
			d[++len]=a[i];
		int l=1,r=len;
		while(l<r)//右查
		{
			int mid=(l+r)/2;
			if(d[mid]>=a[i])r=mid;
			else l=mid+1;	
		}
		d[l]=a[i];
	}
	printf("%d\n",len);
	return 0;
}
2024/10/13 22:54
加载中...