求助!为什么二分后会全TLE
查看原帖
求助!为什么二分后会全TLE
705081
Memory_Lin楼主2022/11/2 21:55
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,a[N],f[N],g[N],len=1,ans;
int main()
{
	while(scanf("%d",&a[++n])) if(cin.get()=='\n') break;
	memset(f,0x3f,sizeof(f));f[1]=a[1];//初始化 第一小问 
	for(int i=2;i<=n;i++){
		int l=0,r=len,mid;
		if(a[i]<=f[len]){
			f[++len]=a[i];
		}else{
			while(l<r){
				mid=(l+r)/2;
				if(a[i]>f[mid]) r=mid;
				else l=mid+1;
			}
			f[l]=max(f[l],a[i]);
		}
	}printf("%d\n",len);
	memset(f,0,sizeof(f));f[1]=a[1];len=1;//初始化 第二小问 
	for(int i=2;i<=n;i++){
		int l=0,r=len,mid;
		if(a[i]>f[len]){
			f[++len]=a[i];
		}else{
			while(l<r){
				mid=(l+r)/2;
				if(a[i]<=f[mid]) r=mid;
				else l=mid+1;
			}
			f[l]=min(a[i],f[l]);
		}
	}printf("%d\n",len);
    return 0;
}

2022/11/2 21:55
加载中...