求助,二分优化为什么全TLE
查看原帖
求助,二分优化为什么全TLE
764785
VoId_D_C楼主2024/5/30 13:18
#include<iostream>
#include<cstring>
using namespace std;
int dp[100010],a[100010],len=1,n,t; 
int dp2[100010];
int find(int x){
	int l=1,r=len;
	int mid;
	while(l<=r){
		mid=(l+r)/2;
		if(x>dp2[mid]) l=mid+1;
		else if(x<dp2[mid]) r=mid-1;
	}
	return l;
}
int findf(int x){
	int l=1,r=len;
	int mid;
	while(l<=r){
		mid=(l+r)/2;
		if(x>dp[mid]) l=mid+1;
		else if(x<dp[mid]) r=mid-1;
	}
	return r;
}
int main(){
	while(cin >> t){
		a[++n]=t;		
	}
	dp[1]=a[1];
	for(int i=2;i<=n;i++){
		if(a[i]<dp[len]){
			dp[++len]=a[i];
		}else{
			int k=findf(a[i]);
			dp[k]=a[i];
		}
	}
	cout << len-1 << endl;
	len=1;
	dp2[1]=1;
	for(int i=1;i<=n;i++){
		if(a[i]>dp2[len]){
			dp2[++len]=a[i];
		}else{
			int k=find(a[i]);
			dp2[k]=a[i];
		}
	}
	cout << len-1;
	return 0;
}
2024/5/30 13:18
加载中...