86分求调
查看原帖
86分求调
1074157
SANJIAOJIE楼主2024/9/22 13:25
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10; 
int n,m,a[N],dp[N],ans,ma=1,x,k,b[N];
int main(){
	while(cin>>x){
		b[++n]=x;a[n]=x;
		bool f=true;
		for(int j=1;j<=k;j++){
			if(x<=b[j]){
				b[j]=x;
				f=false;
				break;
			}
		}
		if(f==true){
			k++;
			b[k]=x;
		}
	}
	dp[1]=a[1];
	for(int i=2;i<=n;i++){
		if(a[i]<dp[ma]){
			ma++;
			dp[ma]=a[i];
		}else{
			int l=1,r=ma;
			while(l<=r){
				int mid=l+r>>1;
				if(a[i]<dp[mid])l=mid+1;
				else r=mid-1;
			}
			dp[l]=a[i];
		}
	}
	printf("%d\n%d",ma,k);
	return 0;
}
2024/9/22 13:25
加载中...