92pls!
查看原帖
92pls!
1126733
lxc129楼主2024/12/31 21:03
using namespace std;
typedef long long ll;
ll a[100001],len,x,f[100001],len1,t;
ll find(ll l,ll r,ll x){
	ll mid,ans;
	while (l<=r){
		mid=(l+r)/2;
		if (f[mid]>=x){
			ans=mid;
			l=mid+1;
		}
		else r=mid-1;
	}
	return ans;
}
int main(){
	while (cin>>x) a[++len]=x;
	f[++len1]=a[1];
	for (ll i=2;i<=len;i++){
		if (f[len1]>=a[i]) f[++len1]=a[i];
		else{
			ll l=0,r=len1,mid,ans;
			while (l<=r){
				mid=(l+r)/2;
				if (f[mid]>=a[i]) l=mid+1;
				else{
					ans=mid;
					r=mid-1;
				}
			}
			f[ans]=a[i];
		}
	}
	for (ll i=1;i<=len;i++) if (f[i]!=0) t++;
	cout<<t<<'\n';
	memset(f,0,sizeof(f));
	t=len1=0;
	f[++len1]=a[1];
	for (ll i=2;i<=len;i++){
		if (f[len1]<a[i]) f[++len1]=a[i];
		else{
			ll l=0,r=len1,mid,ans;
			while (l<=r){
				mid=(l+r)/2;
				if (f[mid]<a[i]) l=mid+1;
				else{
					ans=mid;
					r=mid-1;
				}
			}
			f[ans]=a[i];
		}
	}
	for (ll i=1;i<=len;i++) if (f[i]!=0) t++;
	cout<<t;
}
2024/12/31 21:03
加载中...