求大佬帮助,我时间为什么这么长,二分法也用了呀
查看原帖
求大佬帮助,我时间为什么这么长,二分法也用了呀
557441
NemoLex楼主2021/12/5 20:08
#include<iostream>
#include<stdio.h>
#define MAX 100000+10
#define ll long long
#include<algorithm>
using namespace std;
int fun3(int *arry,int n)
{
	int matr[100000]={0,arry[1]};
	int num=1;//代表长度 
	for(int i=1;i<=n;i++)
	{
		if(arry[i]<matr[num])
		{
		matr[++num]=arry[i];
		}		
		else
		{
		int l=1,r=num;
	while(l<r)
	{
		int mid=(l+r)/2;
		if(matr[mid]>arry[i])
		{
			l=mid+1;
		}
		else
		{
			r=mid;
		}
	}
			matr[r]=arry[i];
		}
	}
	return num;
}
int fun2(int *arry,int n)
{
	int num=0,ans=0;
	while(num!=n)
	{   int ma=100000;
	  ///  printf("删除序列:");
		for(int i=1;i<=n;i++)
		{
			if( arry[i]<=ma&&arry[i]>0)
			{
				num++;
			//	printf("%d :%d",arry[i],i);
				ma=arry[i];
				arry[i]=-1;
			}
		}
		ans++;
	//	printf("\n"); 
	}
	return ans;
}
int main()
{ 
	int arry[MAX]={0},n=1;
	char temp;
	while(cin>>arry[n])
	{
	    n++;
	}
    int num=fun3(arry,n-1);
    int sum=fun2(arry,n-1);
    printf("%d\n",num);
    printf("%d",sum);
}
2021/12/5 20:08
加载中...