最后一点TLE,求助!
查看原帖
最后一点TLE,求助!
526235
mmdxm楼主2022/10/5 21:00
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int temp[100005],z[100005],sum[100005],top=1;
int check(int x){
	int l=0,r=top,mid=0;
	while(l+1!=r){
		mid=(l+r)>>1;
		if(temp[mid]>=x) l=mid;
		else r=mid;
	}
	return l+1;
}
int main(){
	int n=1,m,i,j,k=1;
	while(scanf("%d",&z[n])!=EOF){
		n++;
	}
	n--;
    temp[1]=z[1];
    for(i=2;i<=n;i++){
    	if(temp[top]>=z[i]){
    		top++;
    		temp[top]=z[i];
		}
		else{
			temp[check(z[i])]=z[i];
		}
	}
	sum[k]=z[1];
	for(i=2;i<=n;i++){
		for(j=1;j<=k;j++){
			if(z[i]<=sum[j]){
				sum[j]=z[i];
				break;
			}
			else
			if(j==k){
				k++;
				sum[k]=z[i];
			}
		}
	}
	printf("%d %d",top,k);
	return 0;
}
2022/10/5 21:00
加载中...