二分查找 全WA 8分 求助
查看原帖
二分查找 全WA 8分 求助
345930
Gold14526神金楼主2022/2/12 15:05
using namespace std;
int a[(int)1e5+1];
int s[(int)1e5+1];
int find(int x,int l,int r)
{
	int mid=(l+r)/2;
	if(l==r)return mid;
	if(s[mid]<=x)return find(x,l,mid);
	return find(x,mid+1,r);
}
int find2(int x,int l,int r)
{
	int mid=(l+r)/2;
	if(l==r)return mid;
	if(s[mid]>x)return find(x,l,mid);
	return find(x,mid+1,r);
}
int main()
{
	string t;
	getline(cin,t);
	int n=1,t2;
	for(int i=0;i<t.size();i++)
	{
		if(t[i]==' ')
		{
			n++;
			continue;
		}
		a[n]=a[n]*10+t[i]-'0'; 
	}
	t2=0;
	s[0]=50001;
	for(int i=1;i<=n;i++)
	{
		if(s[t2]>=a[i])
		{
			s[++t2]=a[i];
		}
		s[find(a[i],1,t2)]=a[i];
	}
	printf("%d\n",t2);
	s[0]=-1;
	t2=0;
	for(int i=1;i<=n;i++)
	{
		if(s[t2]<a[i])
		{
			s[++t2]=a[i];
		}
		s[find2(a[i],1,t2)]=a[i];
	}
	printf("%d",t2);
	return 0;
}
2022/2/12 15:05
加载中...